ressource type-en-images, php js et css
This commit is contained in:
+1
-1
File diff suppressed because one or more lines are too long
+112
-4
@@ -2206,11 +2206,11 @@ svg.ext {
|
|||||||
width: fit-content;
|
width: fit-content;
|
||||||
padding-left: 25%;
|
padding-left: 25%;
|
||||||
}
|
}
|
||||||
@media screen and (min-width: 1100px) {
|
@media (min-width: 1100px) {
|
||||||
.page-node-type-ressource .layout__region--top .block-region-top .block-entity-fieldnodefield-images {
|
.page-node-type-ressource .layout__region--top .block-region-top .block-entity-fieldnodefield-images {
|
||||||
grid-column: 1;
|
grid-column: 1;
|
||||||
grid-row: 1/span 7; /* Prendre toutes les lignes disponibles */
|
grid-row: 1/span 7;
|
||||||
align-self: start; /* S'assurer qu'il commence en haut */
|
align-self: start;
|
||||||
justify-self: end;
|
justify-self: end;
|
||||||
margin-left: 2rem;
|
margin-left: 2rem;
|
||||||
}
|
}
|
||||||
@@ -5585,7 +5585,7 @@ svg.ext {
|
|||||||
.path-ressources .layout-content .region-content #block-contenudelapageprincipale .layout--onecol .layout__region--content .block-region-content .block-views-blockbase-de-donnees-block-1 .view-base-de-donnees .view-content .view-type-slide:not(footer) h3.type-les-projets-en-images {
|
.path-ressources .layout-content .region-content #block-contenudelapageprincipale .layout--onecol .layout__region--content .block-region-content .block-views-blockbase-de-donnees-block-1 .view-base-de-donnees .view-content .view-type-slide:not(footer) h3.type-les-projets-en-images {
|
||||||
width: 80%;
|
width: 80%;
|
||||||
border-top: solid 2px rgba(0, 0, 0, 0.3);
|
border-top: solid 2px rgba(0, 0, 0, 0.3);
|
||||||
padding-top: 4rem;
|
padding-top: 4 rem;
|
||||||
}
|
}
|
||||||
.path-ressources .layout-content .region-content #block-contenudelapageprincipale .layout--onecol .layout__region--content .block-region-content .block-views-blockbase-de-donnees-block-1 .view-base-de-donnees .view-content .view-type-slide:not(footer) h3.type-les-projets-en-images:before {
|
.path-ressources .layout-content .region-content #block-contenudelapageprincipale .layout--onecol .layout__region--content .block-region-content .block-views-blockbase-de-donnees-block-1 .view-base-de-donnees .view-content .view-type-slide:not(footer) h3.type-les-projets-en-images:before {
|
||||||
content: url("../images/pictos/picto-ressource-projetsimages.svg");
|
content: url("../images/pictos/picto-ressource-projetsimages.svg");
|
||||||
@@ -5634,6 +5634,114 @@ svg.ext {
|
|||||||
right: 15%;
|
right: 15%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top {
|
||||||
|
display: flex !important;
|
||||||
|
flex-direction: column;
|
||||||
|
margin-left: 11%;
|
||||||
|
}
|
||||||
|
@media screen and (min-width: 1100px) {
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top .block {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top .block-entity-fieldnodefield-images {
|
||||||
|
padding: 0;
|
||||||
|
order: 7;
|
||||||
|
}
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top .block-entity-fieldnodefield-images .carousel {
|
||||||
|
max-width: 60vw;
|
||||||
|
margin: auto;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top .block-entity-fieldnodefield-images .carousel .main-image-container {
|
||||||
|
position: relative;
|
||||||
|
height: 500px;
|
||||||
|
max-height: 500px;
|
||||||
|
overflow: hidden;
|
||||||
|
width: 100%;
|
||||||
|
object-fit: contain;
|
||||||
|
}
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top .block-entity-fieldnodefield-images .carousel .main-image-container img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: contain;
|
||||||
|
transition: transform 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top .block-entity-fieldnodefield-images .carousel .main-image-container img.animate {
|
||||||
|
transform: scale(1.02);
|
||||||
|
}
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top .block-entity-fieldnodefield-images .carousel .main-image-container .arrow {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
background: #00aaff;
|
||||||
|
border-radius: 50%;
|
||||||
|
padding: 5px 10px;
|
||||||
|
color: white;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
content .page-node-type-ressource .type-les-projets-en-images .block-region-top .block-entity-fieldnodefield-images .carousel .main-image-container .arrow.left {
|
||||||
|
left: 10px;
|
||||||
|
}
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top .block-entity-fieldnodefield-images .carousel .main-image-container .arrow.right {
|
||||||
|
right: 10px;
|
||||||
|
}
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top .block-entity-fieldnodefield-images .carousel .caption {
|
||||||
|
margin-top: 10px;
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top .block-entity-fieldnodefield-images .carousel .thumbnails-wrapper {
|
||||||
|
position: relative;
|
||||||
|
max-width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top .block-entity-fieldnodefield-images .carousel .thumbnails-wrapper .thumb-arrow {
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 5px 10px;
|
||||||
|
background: #00aaff;
|
||||||
|
color: white;
|
||||||
|
border-radius: 50%;
|
||||||
|
user-select: none;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top .block-entity-fieldnodefield-images .carousel .thumbnails-wrapper .thumb-arrow.left {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top .block-entity-fieldnodefield-images .carousel .thumbnails-wrapper .thumb-arrow.right {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top .block-entity-fieldnodefield-images .carousel .thumbnails-wrapper .thumbnails {
|
||||||
|
display: flex;
|
||||||
|
gap: 10px;
|
||||||
|
overflow-x: auto;
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
max-width: 100%;
|
||||||
|
padding: 10px 0;
|
||||||
|
scrollbar-width: none;
|
||||||
|
}
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top .block-entity-fieldnodefield-images .carousel .thumbnails-wrapper .thumbnails::-webkit-scrollbar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top .block-entity-fieldnodefield-images .carousel .thumbnails-wrapper .thumbnails img {
|
||||||
|
width: 60px;
|
||||||
|
height: 60px;
|
||||||
|
object-fit: cover;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top .block-entity-fieldnodefield-images .carousel .thumbnails-wrapper .thumbnails img.active {
|
||||||
|
border-color: #00aaff;
|
||||||
|
}
|
||||||
|
.page-node-type-ressource .type-les-projets-en-images .block-region-top .block-entity-fieldnodefield-images .field__items {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
/*partials*/
|
/*partials*/
|
||||||
.layout-container {
|
.layout-container {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|||||||
@@ -14,9 +14,18 @@ use Drupal\Core\Template\Attribute;
|
|||||||
|
|
||||||
function eql_preprocess_html(&$variables) {
|
function eql_preprocess_html(&$variables) {
|
||||||
$node = \Drupal::routeMatch()->getParameter('node');
|
$node = \Drupal::routeMatch()->getParameter('node');
|
||||||
if ($node){
|
if ($node instanceof NodeInterface) {
|
||||||
$variables['attributes']['class'][] = 'node-type-' . $node->bundle();
|
$variables['attributes']['class'][] = 'node-type-' . $node->bundle();
|
||||||
$variables['attributes']['class'][] = 'node-id-' . $node->id();
|
$variables['attributes']['class'][] = 'node-id-' . $node->id();
|
||||||
|
|
||||||
|
// Pour les ressources : ajoute la classe de type de ressource
|
||||||
|
if ($node->bundle() === 'ressource' && $node->hasField('field_type_de_ressource')) {
|
||||||
|
foreach ($node->get('field_type_de_ressource')->referencedEntities() as $term) {
|
||||||
|
$label = $term->label();
|
||||||
|
$css_class = 'type-' . Html::getClass($label);
|
||||||
|
$variables['attributes']['class'][] = $css_class;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,16 +42,7 @@ function eql_preprocess_node(&$variables){
|
|||||||
$type_protagoniste = $node->get('field_type_de_protagoniste')->getString();
|
$type_protagoniste = $node->get('field_type_de_protagoniste')->getString();
|
||||||
$variables['attributes']['class'][] = 'type-de-protagoniste-' . $type_protagoniste;
|
$variables['attributes']['class'][] = 'type-de-protagoniste-' . $type_protagoniste;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if ($node->hasField('field_type_de_ressource') && !$node->get('field_type_de_ressource')->isEmpty()) {
|
|
||||||
// // Récupère la valeur de field_type_de_ressource
|
|
||||||
// $type_de_ressource_entity = $node->get('field_type_de_ressource')->entity;
|
|
||||||
// if ($type_de_ressource_entity) {
|
|
||||||
// $type_de_ressource_name = $type_de_ressource_entity->getName();
|
|
||||||
// // Ajoute la classe CSS basée sur la valeur du type de ressource
|
|
||||||
// $variables['attributes']['class'][] = 'type-de-ressource-' . Html::cleanCssIdentifier($type_de_ressource_name);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
if ($node->getType() === 'ressource' && $node->hasField('field_type_de_ressource') && !$node->get('field_type_de_ressource')->isEmpty()) {
|
if ($node->getType() === 'ressource' && $node->hasField('field_type_de_ressource') && !$node->get('field_type_de_ressource')->isEmpty()) {
|
||||||
foreach ($node->get('field_type_de_ressource')->referencedEntities() as $term) {
|
foreach ($node->get('field_type_de_ressource')->referencedEntities() as $term) {
|
||||||
$label = $term->label(); // ex: "Presse"
|
$label = $term->label(); // ex: "Presse"
|
||||||
@@ -51,6 +51,26 @@ function eql_preprocess_node(&$variables){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
function eql_preprocess_page(array &$variables) {
|
||||||
|
$node = \Drupal::routeMatch()->getParameter('node');
|
||||||
|
if ($node instanceof \Drupal\node\NodeInterface && $node->bundle() === 'ressource') {
|
||||||
|
if ($node->hasField('field_type_de_ressource') && !$node->get('field_type_de_ressource')->isEmpty()) {
|
||||||
|
foreach ($node->get('field_type_de_ressource')->referencedEntities() as $term) {
|
||||||
|
$label = $term->label();
|
||||||
|
$css_class = 'type-' . \Drupal\Component\Utility\Html::getClass($label);
|
||||||
|
|
||||||
|
// S'assurer que les attributs existent
|
||||||
|
if (!isset($variables['page']['top']['#attributes'])) {
|
||||||
|
$variables['page']['top']['#attributes'] = ['class' => []];
|
||||||
|
}
|
||||||
|
|
||||||
|
$variables['page']['top']['#attributes']['class'][] = $css_class;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function eql_preprocess_field(&$variables) {
|
function eql_preprocess_field(&$variables) {
|
||||||
$node = \Drupal::routeMatch()->getParameter('node');
|
$node = \Drupal::routeMatch()->getParameter('node');
|
||||||
@@ -76,6 +96,7 @@ function eql_preprocess_field(&$variables) {
|
|||||||
|
|
||||||
function eql_preprocess_layout__threecol_25_50_25(&$variables) {
|
function eql_preprocess_layout__threecol_25_50_25(&$variables) {
|
||||||
$node = \Drupal::routeMatch()->getParameter('node');
|
$node = \Drupal::routeMatch()->getParameter('node');
|
||||||
|
|
||||||
if($node->gettype() == "projet"){
|
if($node->gettype() == "projet"){
|
||||||
$variables['content']['top_bottom'] = []; /////// déclare les nvx array
|
$variables['content']['top_bottom'] = []; /////// déclare les nvx array
|
||||||
$variables['content']['top_right'] = [];
|
$variables['content']['top_right'] = [];
|
||||||
@@ -102,39 +123,27 @@ function eql_preprocess_layout__threecol_25_50_25(&$variables) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($node && $node->getType() === 'ressource') {
|
||||||
|
if ($node->hasField('field_type_de_ressource') && !$node->get('field_type_de_ressource')->isEmpty()) {
|
||||||
|
$terms = $node->get('field_type_de_ressource')->referencedEntities();
|
||||||
|
if (!empty($terms)) {
|
||||||
|
$label = $terms[0]->label();
|
||||||
|
$css_class = 'type-' . Html::cleanCssIdentifier(strtolower($label));
|
||||||
|
|
||||||
|
// Appliquer cette classe à la région "top"
|
||||||
|
if (!isset($variables['region_attributes']['top'])) {
|
||||||
|
$variables['region_attributes']['top'] = new \Drupal\Core\Template\Attribute();
|
||||||
|
}
|
||||||
|
|
||||||
|
$variables['region_attributes']['top']->addClass($css_class);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// function eql_preprocess_views_view_unformatted(&$variables) {
|
|
||||||
// // On utilise le service de translittération de Drupal
|
|
||||||
// $transliterator = \Drupal::service('transliteration');
|
|
||||||
|
|
||||||
// foreach ($variables['rows'] as &$row) {
|
|
||||||
// if (isset($row['content']['#node'])) {
|
|
||||||
// $node = $row['content']['#node'];
|
|
||||||
|
|
||||||
// if ($node->hasField('field_type_de_ressource') && !$node->get('field_type_de_ressource')->isEmpty()) {
|
|
||||||
// foreach ($node->get('field_type_de_ressource')->referencedEntities() as $term) {
|
|
||||||
// $label = $term->label();
|
|
||||||
|
|
||||||
// // Supprimer les accents
|
|
||||||
// $label_ascii = $transliterator->transliterate($label);
|
|
||||||
|
|
||||||
// // Nettoyer pour que ce soit une classe CSS valide
|
|
||||||
// $class = 'type-' . Html::cleanCssIdentifier(strtolower($label_ascii));
|
|
||||||
|
|
||||||
// $row['attributes']->addClass($class);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function eql_preprocess_views_view_unformatted(array &$variables) {
|
function eql_preprocess_views_view_unformatted(array &$variables) {
|
||||||
$view = $variables['view'];
|
$view = $variables['view'];
|
||||||
|
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ jQuery(function ($) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///// fusion views-type-slide de class identique ////////////
|
///// fusion views-type-slide de class identique ////////////
|
||||||
@@ -180,3 +181,79 @@ jQuery(function ($) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
/////////////////diaporama ressource //////////
|
||||||
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
|
// Attendre que les éléments HTML soient bien présents
|
||||||
|
const interval = setInterval(() => {
|
||||||
|
const mainImage = document.getElementById('mainImage');
|
||||||
|
const prevArrow = document.getElementById('prevArrow');
|
||||||
|
const nextArrow = document.getElementById('nextArrow');
|
||||||
|
const caption = document.getElementById('caption');
|
||||||
|
const thumbsContainer = document.getElementById('thumbnails');
|
||||||
|
const imagesInDom = document.querySelectorAll('.carousel-items .carousel-item img');
|
||||||
|
|
||||||
|
if (mainImage && prevArrow && nextArrow && caption && thumbsContainer && imagesInDom) {
|
||||||
|
clearInterval(interval); // Tous les éléments sont là, on lance le carrousel
|
||||||
|
initCarousel({ mainImage, prevArrow, nextArrow, caption, thumbsContainer });
|
||||||
|
}
|
||||||
|
}, 100); // vérifie toutes les 100ms
|
||||||
|
});
|
||||||
|
function initCarousel({ mainImage, prevArrow, nextArrow, caption, thumbsContainer }) {
|
||||||
|
const images = [];
|
||||||
|
document.querySelectorAll('.carousel-items .carousel-item img').forEach((img) => {
|
||||||
|
images.push({
|
||||||
|
src: img.getAttribute('src'),
|
||||||
|
caption: img.getAttribute('alt') || 'Image sans légende'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
console.log('Images chargées pour le carrousel :', images);
|
||||||
|
|
||||||
|
if (!images.length) return;
|
||||||
|
|
||||||
|
let currentIndex = 0;
|
||||||
|
|
||||||
|
function showImage(index) {
|
||||||
|
mainImage.src = images[index].src;
|
||||||
|
caption.textContent = images[index].caption;
|
||||||
|
|
||||||
|
const thumbnails = document.querySelectorAll('.thumbnails img');
|
||||||
|
thumbnails.forEach(img => img.classList.remove('active'));
|
||||||
|
if (thumbnails[index]) {
|
||||||
|
thumbnails[index].classList.add('active');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
prevArrow.addEventListener('click', () => {
|
||||||
|
currentIndex = (currentIndex - 1 + images.length) % images.length;
|
||||||
|
showImage(currentIndex);
|
||||||
|
});
|
||||||
|
|
||||||
|
nextArrow.addEventListener('click', () => {
|
||||||
|
currentIndex = (currentIndex + 1) % images.length;
|
||||||
|
showImage(currentIndex);
|
||||||
|
});
|
||||||
|
|
||||||
|
images.forEach((img, index) => {
|
||||||
|
const thumb = document.createElement('img');
|
||||||
|
thumb.src = img.src;
|
||||||
|
thumb.alt = img.caption;
|
||||||
|
thumb.onclick = () => {
|
||||||
|
currentIndex = index;
|
||||||
|
showImage(index);
|
||||||
|
};
|
||||||
|
thumbsContainer.appendChild(thumb);
|
||||||
|
});
|
||||||
|
|
||||||
|
showImage(currentIndex);
|
||||||
|
const thumbPrev = document.getElementById('thumbPrev');
|
||||||
|
const thumbNext = document.getElementById('thumbNext');
|
||||||
|
|
||||||
|
thumbPrev.addEventListener('click', () => {
|
||||||
|
thumbsContainer.scrollBy({ left: -150, behavior: 'smooth' });
|
||||||
|
});
|
||||||
|
|
||||||
|
thumbNext.addEventListener('click', () => {
|
||||||
|
thumbsContainer.scrollBy({ left: 150, behavior: 'smooth' });
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,147 @@
|
|||||||
|
|
||||||
|
.page-node-type-ressource{
|
||||||
|
|
||||||
|
.type-les-projets-en-images .block-region-top{
|
||||||
|
display: flex !important;
|
||||||
|
flex-direction: column;
|
||||||
|
margin-left: 11%;
|
||||||
|
@media screen and (min-width:1100px) {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.block {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
.block-entity-fieldnodefield-images{
|
||||||
|
padding: 0;
|
||||||
|
order: 7;
|
||||||
|
|
||||||
|
.carousel {
|
||||||
|
max-width: 60vw;
|
||||||
|
margin: auto;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
.main-image-container {
|
||||||
|
position: relative;
|
||||||
|
// background: #e0f5ff;
|
||||||
|
height: 500px;
|
||||||
|
max-height: 500px;
|
||||||
|
overflow: hidden;
|
||||||
|
width: 100%;
|
||||||
|
object-fit: contain;
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: contain;
|
||||||
|
transition: transform 0.3s ease-in-out;
|
||||||
|
// transition: opacity 0.4s ease-in-out; // à réactiver si fade souhaité
|
||||||
|
&.animate {
|
||||||
|
transform: scale(1.02); // léger effet smooth sur changement
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.arrow {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
background: #00aaff;
|
||||||
|
border-radius: 50%;
|
||||||
|
padding: 5px 10px;
|
||||||
|
color: white;
|
||||||
|
cursor: pointer;
|
||||||
|
content
|
||||||
|
|
||||||
|
&.left {
|
||||||
|
left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.right {
|
||||||
|
right: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// #prevArrow{
|
||||||
|
// &::before{
|
||||||
|
// content:url("../images/pictos/fleche-droite-dans-rond.png");
|
||||||
|
// display: block;
|
||||||
|
// transform: scaleX(-1);
|
||||||
|
// width: 50px;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// #nextArrow{
|
||||||
|
// &::before{
|
||||||
|
// content:url("../images/pictos/fleche-droite-dans-rond.png");
|
||||||
|
// display: block;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
.caption {
|
||||||
|
margin-top: 10px;
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thumbnails-wrapper {
|
||||||
|
position: relative;
|
||||||
|
max-width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
.thumb-arrow {
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 5px 10px;
|
||||||
|
background: #00aaff;
|
||||||
|
color: white;
|
||||||
|
border-radius: 50%;
|
||||||
|
user-select: none;
|
||||||
|
z-index: 2;
|
||||||
|
// font-weight: bold;
|
||||||
|
|
||||||
|
&.left {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.right {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.thumbnails {
|
||||||
|
display: flex;
|
||||||
|
gap: 10px;
|
||||||
|
overflow-x: auto;
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
max-width: 100%;
|
||||||
|
padding: 10px 0;
|
||||||
|
scrollbar-width: none; // Firefox
|
||||||
|
|
||||||
|
&::-webkit-scrollbar {
|
||||||
|
display: none; // Chrome, Safari
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 60px;
|
||||||
|
height: 60px;
|
||||||
|
object-fit: cover;
|
||||||
|
border: 2px solid transparent;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
border-color: #00aaff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Masquer les images Drupal originales (facultatif)
|
||||||
|
.field__items {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// }
|
||||||
|
}
|
||||||
@@ -10,6 +10,7 @@
|
|||||||
@media (max-width: 550px) {
|
@media (max-width: 550px) {
|
||||||
padding-top: 0rem;
|
padding-top: 0rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.block-region-top{
|
.block-region-top{
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@@ -18,27 +19,31 @@
|
|||||||
grid-template-columns: 1fr 2fr; /* 1/3 pour l'image, 2/3 pour le contenu */
|
grid-template-columns: 1fr 2fr; /* 1/3 pour l'image, 2/3 pour le contenu */
|
||||||
gap: 0.5rem;
|
gap: 0.5rem;
|
||||||
}
|
}
|
||||||
.block-entity-fieldnodefield-images{
|
|
||||||
|
.block-entity-fieldnodefield-images {
|
||||||
width: fit-content;
|
width: fit-content;
|
||||||
// padding-right: 2rem;
|
|
||||||
padding-left: 25%;
|
padding-left: 25%;
|
||||||
|
|
||||||
@media screen and (min-width:1100px) {
|
@media (min-width: 1100px) {
|
||||||
grid-column: 1;
|
grid-column: 1;
|
||||||
grid-row: 1 /span 7; /* Prendre toutes les lignes disponibles */
|
grid-row: 1 / span 7;
|
||||||
align-self: start; /* S'assurer qu'il commence en haut */
|
align-self: start;
|
||||||
justify-self: end;
|
justify-self: end;
|
||||||
margin-left: 2rem;
|
margin-left: 2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 1100px) {
|
@media (max-width: 1100px) {
|
||||||
padding-left: 13%;
|
padding-left: 13%;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 550px) {
|
@media (max-width: 550px) {
|
||||||
width: 100vw;
|
width: 100vw;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
}
|
||||||
|
|
||||||
.block-block-content4e5df355-e76c-4e44-bec0-e211d94f2640,
|
.block-block-content4e5df355-e76c-4e44-bec0-e211d94f2640,
|
||||||
.block-entity-fieldnodefield-type-de-ressource,
|
.block-entity-fieldnodefield-type-de-ressource,
|
||||||
.block-entity-fieldnodetitle,
|
.block-entity-fieldnodetitle,
|
||||||
@@ -164,6 +169,8 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.block-region-top:has(.type-de-media-video)
|
||||||
|
|
||||||
.block-region-top:has(.type-de-media-video){
|
.block-region-top:has(.type-de-media-video){
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -181,6 +188,7 @@
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.layout__region--first{ // menu ancres a gauche
|
.layout__region--first{ // menu ancres a gauche
|
||||||
margin-top: 3rem;
|
margin-top: 3rem;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|||||||
@@ -346,7 +346,7 @@
|
|||||||
h3.type-les-projets-en-images {
|
h3.type-les-projets-en-images {
|
||||||
width: 80%;
|
width: 80%;
|
||||||
border-top: solid 2px rgba(0, 0, 0, 0.3);
|
border-top: solid 2px rgba(0, 0, 0, 0.3);
|
||||||
padding-top: 4rem;
|
padding-top: 4 rem;
|
||||||
&:before{
|
&:before{
|
||||||
content:url("../images/pictos/picto-ressource-projetsimages.svg");
|
content:url("../images/pictos/picto-ressource-projetsimages.svg");
|
||||||
padding-right: 1rem;
|
padding-right: 1rem;
|
||||||
|
|||||||
@@ -53,6 +53,7 @@
|
|||||||
@import "pages/_incubateur";
|
@import "pages/_incubateur";
|
||||||
@import "pages/_lincubateur_newpage";
|
@import "pages/_lincubateur_newpage";
|
||||||
@import "pages/ressources";
|
@import "pages/ressources";
|
||||||
|
@import "pages/ressource-type-en-images";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,61 @@
|
|||||||
|
{#
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Theme override to display a block.
|
||||||
|
*
|
||||||
|
* Available variables:
|
||||||
|
* - plugin_id: The ID of the block implementation.
|
||||||
|
* - label: The configured label of the block if visible.
|
||||||
|
* - configuration: A list of the block's configuration values.
|
||||||
|
* - label: The configured label for the block.
|
||||||
|
* - label_display: The display settings for the label.
|
||||||
|
* - provider: The module or other provider that provided this block plugin.
|
||||||
|
* - Block plugin specific settings will also be stored here.
|
||||||
|
* - content: The content of this block.
|
||||||
|
* - attributes: array of HTML attributes populated by modules, intended to
|
||||||
|
* be added to the main container tag of this template.
|
||||||
|
* - id: A valid HTML ID and guaranteed unique.
|
||||||
|
* - title_attributes: Same as attributes, except applied to the main title
|
||||||
|
* tag that appears in the template.
|
||||||
|
* - title_prefix: Additional output populated by modules, intended to be
|
||||||
|
* displayed in front of the main title tag that appears in the template.
|
||||||
|
* - title_suffix: Additional output populated by modules, intended to be
|
||||||
|
* displayed after the main title tag that appears in the template.
|
||||||
|
*
|
||||||
|
* @see template_preprocess_block()
|
||||||
|
*/
|
||||||
|
#}
|
||||||
|
{%
|
||||||
|
set classes = [
|
||||||
|
'block',
|
||||||
|
'block-' ~ configuration.provider|clean_class,
|
||||||
|
'block-' ~ plugin_id|clean_class,
|
||||||
|
]
|
||||||
|
%}
|
||||||
|
<div{{ attributes.addClass(classes) }}>
|
||||||
|
{{ title_prefix }}
|
||||||
|
{% if label %}
|
||||||
|
{# <video autoplay muted loop id="myVideo">
|
||||||
|
<source src="rain.mp4" type="video/mp4">
|
||||||
|
</video> #}
|
||||||
|
<span><h2{{ title_attributes }}>{{ label }}</h2></span>
|
||||||
|
{% endif %}
|
||||||
|
{{ title_suffix }}
|
||||||
|
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="carousel">
|
||||||
|
<div class="main-image-container">
|
||||||
|
<div class="arrow left" id="prevArrow">←</div>
|
||||||
|
<img id="mainImage" src="" alt="Image principale">
|
||||||
|
<div class="arrow right" id="nextArrow">→</div>
|
||||||
|
</div>
|
||||||
|
<div class="caption" id="caption"></div>
|
||||||
|
<div class="thumbnails-wrapper">
|
||||||
|
<div class="thumb-arrow left" id="thumbPrev">←</div>
|
||||||
|
<div class="thumbnails" id="thumbnails"></div>
|
||||||
|
<div class="thumb-arrow right" id="thumbNext">→</div>
|
||||||
|
</div> </div>
|
||||||
|
{{ content }}
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
{#
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Theme override for a field.
|
||||||
|
*
|
||||||
|
* To override output, copy the "field.html.twig" from the templates directory
|
||||||
|
* to your theme's directory and customize it, just like customizing other
|
||||||
|
* Drupal templates such as page.html.twig or node.html.twig.
|
||||||
|
*
|
||||||
|
* Instead of overriding the theming for all fields, you can also just override
|
||||||
|
* theming for a subset of fields using
|
||||||
|
* @link themeable Theme hook suggestions. @endlink For example,
|
||||||
|
* here are some theme hook suggestions that can be used for a field_foo field
|
||||||
|
* on an article node type:
|
||||||
|
* - field--node--field-foo--article.html.twig
|
||||||
|
* - field--node--field-foo.html.twig
|
||||||
|
* - field--node--article.html.twig
|
||||||
|
* - field--field-foo.html.twig
|
||||||
|
* - field--text-with-summary.html.twig
|
||||||
|
* - field.html.twig
|
||||||
|
*
|
||||||
|
* Available variables:
|
||||||
|
* - attributes: HTML attributes for the containing element.
|
||||||
|
* - label_hidden: Whether to show the field label or not.
|
||||||
|
* - title_attributes: HTML attributes for the title.
|
||||||
|
* - label: The label for the field.
|
||||||
|
* - multiple: TRUE if a field can contain multiple items.
|
||||||
|
* - items: List of all the field items. Each item contains:
|
||||||
|
* - attributes: List of HTML attributes for each item.
|
||||||
|
* - content: The field item's content.
|
||||||
|
* - entity_type: The entity type to which the field belongs.
|
||||||
|
* - field_name: The name of the field.
|
||||||
|
* - field_type: The type of the field.
|
||||||
|
* - label_display: The display settings for the label.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @see template_preprocess_field()
|
||||||
|
*/
|
||||||
|
#}
|
||||||
|
|
||||||
|
{%
|
||||||
|
set classes = [
|
||||||
|
'field',
|
||||||
|
'field--name-' ~ field_name|clean_class,
|
||||||
|
'field--type-' ~ field_type|clean_class,
|
||||||
|
'field--label-' ~ label_display,
|
||||||
|
label_display == 'inline' ? 'clearfix',
|
||||||
|
]
|
||||||
|
%}
|
||||||
|
{%
|
||||||
|
set title_classes = [
|
||||||
|
'field__label',
|
||||||
|
label_display == 'visually_hidden' ? 'visually-hidden',
|
||||||
|
]
|
||||||
|
%}
|
||||||
|
|
||||||
|
|
||||||
|
{% if label_hidden %}
|
||||||
|
{% if multiple %}
|
||||||
|
<div{{ attributes.addClass(classes, 'field__items', 'carousel-items') }}>
|
||||||
|
{% for item in items %}
|
||||||
|
<div{{ item.attributes.addClass('field__item', 'carousel-item') }}>{{ item.content }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
{% for item in items %}
|
||||||
|
<div {{ attributes.addClass(classes, 'field__item') }}>{{ item.content }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
<div{{ attributes.addClass(classes) }}>
|
||||||
|
<div{{ title_attributes.addClass(title_classes) }}>{{ label }}</div>
|
||||||
|
{% if multiple %}
|
||||||
|
<div class="field__items">
|
||||||
|
{% endif %}
|
||||||
|
{% for item in items %}
|
||||||
|
<div{{ item.attributes.addClass('field__item', 'carousel-item') }}>{{ item.content }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% if multiple %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -22,7 +22,9 @@
|
|||||||
{% if content %}
|
{% if content %}
|
||||||
<div{{ attributes.addClass(classes) }}>
|
<div{{ attributes.addClass(classes) }}>
|
||||||
{% if content.top %}
|
{% if content.top %}
|
||||||
<div {{ region_attributes.top.addClass('layout__region', 'layout__region--top') }}>
|
<div{{ region_attributes.top.addClass('layout__region', 'layout__region--top') }}>
|
||||||
|
|
||||||
|
{# <div {{ region_attributes.top.addClass('layout__region', 'layout__region--top') }}> #}
|
||||||
{{content.top}}
|
{{content.top}}
|
||||||
<div class='top_top'>
|
<div class='top_top'>
|
||||||
{{ content.top_left }}
|
{{ content.top_left }}
|
||||||
|
|||||||
Reference in New Issue
Block a user