main.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. console.log('salut');
  2. // menu burger open
  3. var burger = document.getElementById("block-burger");
  4. var burgertitle = document.getElementById("block-burger-menu");
  5. burgertitle.addEventListener("click", toggleMenu);
  6. function toggleMenu(event) {
  7. // console.log(event);
  8. burger.classList.toggle('opened');
  9. }
  10. //////////////////////////
  11. // faq reponse open
  12. var answers = document.getElementsByClassName("field--name-field-reponse");
  13. var fichiers = document.getElementsByClassName("field--name-field-fichiers");
  14. var questions = document.getElementsByClassName("field--name-field-question");
  15. for (let i = 0; i < questions.length; i++) {
  16. const question = questions[i]
  17. question.addEventListener("click", toggleFaq);
  18. }
  19. function toggleFaq(event) {
  20. // console.log(event, this);
  21. // fermé tout
  22. for (let i = 0; i < answers.length; i++) {
  23. answers[i].classList.remove('opened');
  24. }
  25. // la réponse correspndante a la question clické
  26. // | this c'est l'élément sur le quel on a clické
  27. // | |le parent |la réponse dans le parent
  28. let answer = this.parentNode.querySelector('.field--name-field-reponse');
  29. // console.log(answer);
  30. answer.classList.add('opened');
  31. }
  32. ///// répète fonction pour les fichiers, les liens et ressources
  33. //// il faudrait créer un tableau d'objet ?
  34. var fichiers = document.getElementsByClassName("field--name-field-fichiers");
  35. var questions = document.getElementsByClassName("field--name-field-question");
  36. for (let i = 0; i < questions.length; i++) {
  37. const question = questions[i]
  38. question.addEventListener("click", toggleFaqFichiers);
  39. }
  40. function toggleFaqFichiers(event) {
  41. // console.log(event, this);
  42. for (let i = 0; i < fichiers.length; i++) {
  43. fichiers[i].classList.remove('opened');
  44. }
  45. let fichier = this.parentNode.querySelector('.field--name-field-fichiers');
  46. fichier.classList.add('opened');
  47. }
  48. ////////////////////////
  49. var liens = document.getElementsByClassName("field--name-field-liens");
  50. var questions = document.getElementsByClassName("field--name-field-question");
  51. for (let i = 0; i < questions.length; i++) {
  52. const question = questions[i]
  53. question.addEventListener("click", toggleFaqLiens);
  54. }
  55. function toggleFaqLiens(event) {
  56. // console.log(event, this);
  57. for (let i = 0; i < liens.length; i++) {
  58. liens[i].classList.remove('opened');
  59. }
  60. let lien = this.parentNode.querySelector('.field--name-field-liens');
  61. lien.classList.add('opened');
  62. }
  63. //////////////////////
  64. var ressources = document.getElementsByClassName("field--name-field-ress");
  65. var questions = document.getElementsByClassName("field--name-field-question");
  66. for (let i = 0; i < questions.length; i++) {
  67. const question = questions[i]
  68. question.addEventListener("click", toggleFaqRessources);
  69. }
  70. function toggleFaqRessources(event) {
  71. // console.log(event, this);
  72. for (let i = 0; i < resources.length; i++) {
  73. ressources[i].classList.remove('opened');
  74. }
  75. let ressource = this.parentNode.querySelector('.field--name-field-ress');
  76. ressource.classList.add('opened');
  77. }
  78. ///////////////////////////////
  79. ////////////////////////////////
  80. // fleche qui tourne faq
  81. // var questions = document.getElementsByClassName("field--name-field-question");
  82. // var paragraph = document.querySelector('.field--name-field-question p::after');
  83. // console.log(paragraph)
  84. // var styles = window.getComputedStyle(element,':after')
  85. // console.log(styles)
  86. // var content = styles['content']
  87. // console.log(content)
  88. // for (let i = 0; i < questions.length; i++) {
  89. // const question = questions[i]
  90. // question.addEventListener("click", rotateFleche);
  91. // }
  92. // function rotateFleche(event) {
  93. // console.log(event, this);
  94. // // for (let i = 0; i < answers.length; i++) {
  95. // // answers[i].classList.remove('opened');
  96. // // }
  97. // }
  98. //////////////////////////////////////////
  99. // block collection reste bleu quand actif
  100. jQuery(function($) {
  101. var path = window.location.href; // because the 'href' property of the DOM element is the absolute path
  102. console.log(path);
  103. $(".view-id-collections .view-content .views-row a").each(function() {
  104. if (this.href === path) {
  105. $(this).parent().closest('.views-row').addClass('active');
  106. }
  107. });
  108. });
  109. // /////////////////
  110. //// ancre dans texte au click parragraphe correspondant arrive en dessous du header
  111. (function($, window) {
  112. var adjustAnchor = function() {
  113. var $anchor = $('.block-entity-fieldnodefield-textes'),
  114. fixedElementHeight = 350;
  115. if ($anchor.length > 0) {
  116. $('html, body').stop().animate({scrollTop: $anchor.offset().top - fixedElementHeight }, 0);
  117. }
  118. };
  119. $(window).on('hashchange', function() {
  120. adjustAnchor();
  121. });
  122. })(jQuery, window);
  123. // ///////////////////////////////
  124. // slideshow home // marche pas. attention ai rajouter des class dans template views.view.html.twig et views-view-actus-blocks-pages--block-1.html.twig
  125. (function($, window) {
  126. console.log('hello')
  127. $(document).ready(function(){
  128. $('.path-frontpage .view-actus-blocks-pages .view-content .view-type-slide .views-row-wrapper').slick({
  129. slidesToShow: 1,
  130. // slidesToScroll: 1,
  131. dots: true,
  132. arrows: true,
  133. centerMode: true,
  134. // centerPadding: '100px',
  135. responsive: [
  136. {
  137. breakpoint: 810,
  138. settings: {
  139. slidesToShow: 1,
  140. adaptiveHeight: true,
  141. arrows: false,
  142. draggable: true,
  143. centerMode: true,
  144. }
  145. }]
  146. });
  147. console.log('salut slick home');
  148. $('.page-node-type-actualite .block-entity-fieldnodefield-images .field--type-image').slick({
  149. dots: true,
  150. arrows: true,
  151. adaptiveHeight: true,
  152. responsive: [
  153. {
  154. breakpoint: 800,
  155. settings: {
  156. adaptiveHeight: true
  157. }
  158. }]
  159. });
  160. console.log('salut slick actus');
  161. $('.page-node-type-projet .block-entity-fieldnodefield-photo .field--type-image').slick({
  162. slidesToShow: 1,
  163. dots: true,
  164. arrows: false,
  165. draggable: true,
  166. adaptiveHeight: true,
  167. responsive: [
  168. {
  169. breakpoint: 800,
  170. settings: {
  171. adaptiveHeight: true
  172. }
  173. }]
  174. });
  175. console.log('salut slick projets');
  176. $('.path-ressources .view:not(.view-partenaires) .view-content .view-type-slide .views-row-wrapper').slick({
  177. slidesToShow: 3,
  178. dots: false,
  179. arrows: true,
  180. infinite: false,
  181. centerMode: false,
  182. // responsive: [
  183. // {
  184. // breakpoint: 810,
  185. // settings: {
  186. // slidesToShow: 3,
  187. // arrows: false,
  188. // draggable: true,
  189. // centerMode: true,
  190. // }
  191. // }]
  192. });
  193. console.log('salut slick ressource');
  194. });
  195. // //////// start ajoute class à views-row-wrapper et view-type-slide dans /ressources ////////
  196. $(document).ready(function () {
  197. $(".views-row-wrapper").each(function () {
  198. let h3 = $(this).prev("h3");
  199. let link = h3.find("a");
  200. if (link.length) {
  201. let text = link.text().trim();
  202. let className = text
  203. .toLowerCase()
  204. .normalize("NFD").replace(/[\u0300-\u036f]/g, "") // enlever les accents
  205. .replace(/[^a-z0-9]+/g, '-') // remplacer tout ce qui n'est pas a-z0-9 par -
  206. .replace(/(^-|-$)/g, ''); // enlever tirets début/fin
  207. $(this).addClass('type-' + className);
  208. // Ajouter la même classe sur le <h3>
  209. h3.addClass('type-' + className);
  210. h3.closest('.view-type-slide').addClass('type-' + className); // ajouter aussi au bloc parent
  211. }
  212. });
  213. $(".wrapper-ressource").each(function(){
  214. let media = $(this).find(".field--name-field-type-de-media");
  215. // console.log(media);
  216. let mediaText = media.text().trim();
  217. let className = mediaText
  218. .toLowerCase()
  219. .normalize("NFD").replace(/[\u0300-\u036f]/g, "") // enlever les accents
  220. .replace(/[^a-z0-9]+/g, '-') // remplacer tout ce qui n'est pas a-z0-9 par -
  221. .replace(/(^-|-$)/g, ''); // enlever tirets début/fin
  222. // console.log(mediaText);
  223. $(this).addClass('type-media-' + className);
  224. });
  225. ////// cache les slide non voulue en fonction de la class /////////
  226. const allowedTypes = [
  227. "type-publication-issue-du-programme-eqld",
  228. "type-paroles-de-laureats",
  229. "type-les-projets-en-images",
  230. "type-presse"
  231. ];
  232. $(".view-type-slide").each(function () {
  233. let $block = $(this);
  234. let keep = allowedTypes.some(type => $block.hasClass(type));
  235. if (!keep) {
  236. $block.hide(); // ou fadeOut() si tu veux un effet
  237. }
  238. });
  239. });
  240. // /////// end class à views-row-wrapper ///////
  241. /////////////// start ouverture liens externes vers nouvel onglet //////////////////
  242. document.querySelectorAll('a[href^="http"]').forEach(link => {
  243. if (!link.href.includes(location.hostname)) {
  244. link.setAttribute('target', '_blank');
  245. link.setAttribute('rel', 'noopener noreferrer');
  246. }
  247. });
  248. /////////////// end ouverture liens externes vers nouvel onglet //////////////////
  249. /// start /// dans pages /projets après click sur appliquer filtres, scroll down la page au niveau des filtres //////
  250. document.addEventListener("DOMContentLoaded", function () {
  251. const form = document.querySelector(".views-exposed-form");
  252. // console.log(form);
  253. if (form) {
  254. form.setAttribute("action", form.action.split("#")[0] + "#filtres");
  255. }
  256. if (window.location.hash === "#filtres") {
  257. const target = document.getElementById("filtres");
  258. if (target) {
  259. // target.scrollIntoView({ behavior: "smooth", block: "start" });
  260. const offset = 300;
  261. const top = target.getBoundingClientRect().top + window.pageYOffset - offset;
  262. window.scrollTo({
  263. top: top,
  264. behavior: "smooth"
  265. });
  266. }
  267. }
  268. /// end //// dans pages /projets après click sur appliquer filtres, scroll down la page au niveau des filtres //////
  269. //// start ne pas afficher type de ressource 2 fois dans /ressources //////
  270. document.querySelectorAll(".view-type-slide").forEach(view => {
  271. const h3Content = view.querySelector("h3 > a")?.textContent.trim();
  272. view.querySelectorAll(".field--name-field-type-de-ressource").forEach(field => {
  273. const fieldText = field.textContent.trim();
  274. if (fieldText === h3Content) {
  275. field.style.display = "none";
  276. }
  277. });
  278. });
  279. //// end ne pas afficher type de ressource 2 fois dans /ressources //////
  280. });
  281. })(jQuery, window);