1/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ 2/* !!! suffixe "RVVN" obligatoire dans la clef !!! */ 3/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ 4 5/* Contenus RVVN ***************************************************************************/ 6 7tarteaucitron.services.youtubeRVVN = { 8 "key": "youtubeRVVN", 9 "type": "video", 10 "name": "YouTube", 11 "uri": "https://policies.google.com/privacy", 12 "needConsent": true, 13 "cookies": ['VISITOR_INFO1_LIVE', 'YSC', 'PREF', 'GEUP'], 14 "domains": [ 15 "www.youtube-nocookie.com", 16 "googlevideo.com", 17 "www.google.com", 18 "www.gstatic.com", 19 "fonts.gstatic.com", 20 "googleapis.com", 21 "ytimg.com", 22 "ggpht.com" 23 ], // attribut custom de RVVN 24 "js": function() { 25 "use strict"; 26 tarteaucitron.fallback(['youtube_responsive'], function(x) { 27 var video_id = x.dataset.videoId || x.dataset.playlistId, 28 video_title = ((x.dataset.videoTitle || x.dataset.playlistTitle) ?? "").replaceAll('"', '"'), 29 embed_type = x.dataset.embedType, 30 autoplay = x.dataset.autoplay || "0", 31 video_frame, 32 params = 'theme=light&rel=0&controls=1&showinfo=1&autoplay=' + autoplay + '&mute=0&autohide=1&fs=1&hd=1&wmode=transparent&enablejsapi=1&html5=1'; 33 if (video_id === undefined) { 34 return ""; 35 } 36 if (embed_type === undefined || !['video', 'playlist'].includes(embed_type)) { 37 embed_type = "video"; 38 } 39 var src = 'https://www.youtube-nocookie.com/embed/'; 40 if (embed_type == "playlist") { 41 src += 'videoseries?list=' + video_id + '&'; 42 } else { 43 src += video_id + '?'; 44 } 45 video_frame = '<div class="TACVideoPlayer"><iframe type="text/html" title="(' + embed_type + ' Youtube) ' + video_title + '" src="' + src + params + '" frameborder="0" allowfullscreen></iframe></div>'; 46 return video_frame; 47 }); 48 tarteaucitron.fallback(['YTimage'], function(x) { 49 if(x.parentNode.dataset.modal !== undefined) { 50 window.tobiiVideo ??= new Tobii({ 51 selector: false, 52 dialogTitle: "Ceci est une fenêtre de dialogue qui s'affiche par dessus le contenu de la page. Cette modale affiche la vidéo Youtube. Appuyez sur la touche Ãchap pour fermer la modale et retourner au contenu de la page.", 53 loadingIndicatorLabel: "Chargement de la vidéo", 54 closeLabel: 'Fermer la fenêtre de dialogue', 55 navLabel: ['Vidéo précédente', 'Vidéo suivante'], 56 /*zoom: true, 57 zoomText: ` 58 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-hidden="true" focusable="false" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" stroke="currentColor"> 59 <path d="M8 3H5a2 2 0 00-2 2v3m18 0V5a2 2 0 00-2-2h-3m0 18h3a2 2 0 002-2v-3M3 16v3a2 2 0 002 2h3"/> 60 </svg>`,*/ 61 }); 62 window.tobiiVideo.add(x.parentNode); 63 64 } 65 $(x.parentNode).click(function(event) { 66 event.preventDefault(); 67 var target = $(event.target); 68 if (target.hasClass('tarteaucitronAllow')) { 69 return false; 70 } 71 if (x.parentNode.dataset.modal === undefined) { 72 if (!$(this).hasClass('playerUp')) { 73 $(this).addClass('playerUp'); 74 $(this).find('.date').remove(); 75 $(this).find('picture').remove(); 76 var url = $(this).attr("href"); 77 var ytID = url.split("https://www.youtube.com/watch?v=")[1]; 78 const video_title = (x.dataset.youtubeTitle ?? "").replaceAll('"', '"'); 79 $(this).prepend('<div class="YTvideo"><iframe id="ytplayer-' + ytID + '" type="text/html" title="(video Youtube) ' + video_title + '" src="https://www.youtube-nocookie.com/embed/' + ytID + '?rel=0&fs=1&auto
79play=1&enablejsapi=1&html5=1" frameborder="0" allowfullscreen="" allow="autoplay;"></iframe></div>'); 80 } 81 } 82 }); 83 84 return '<img src="https://img.youtube.com/vi/' + x.dataset.youtubeId + '/sddefault.jpg" class="img-fluid"/><i class="fas fa-play-circle"></i>'; 85 }); 86 }, 87 "fallback": function() { 88 "use strict"; 89 var id = 'youtubeRVVN'; 90 tarteaucitron.fallback(['youtube_responsive', 'YTimage'], function(elem) { 91 if (elem.classList.contains('YTimage')) { 92 elem.parentNode.onclick = function(e) { 93 e.preventDefault(); 94 } 95 } 96 return tarteaucitron.engage(id); 97 }); 98 } 99}; 100tarteaucitron.services.dailymotionRVVN = { 101 "key": "dailymotionRVVN", 102 "type": "video", 103 "name": "Dailymotion", 104 "uri": "https://www.dailymotion.com/legal/privacy", 105 "needConsent": true, 106 "cookies": ['ts', 'dmvk', 'hist', 'v1st', 's_vi'], 107 "domains": [ 108 "Pour Dailymotion : www.dailymotion.com, geo.dailymotion.com, dmcdn.net, dm-event.net, api.dailymotion.com, dmxleo.dailymotion.com, dmxleo.com", 109 "Pour Google : imasdk.googleapis.com, googlesyndication.com, www.gstatic.com", 110 "Pour les régies publicitaires : doubleclick.net, mediarithmics.com, 2mdn.net, nmrodam.com, ads.yieldmo.com, ads.servenobid.com, ads.stickyadstv.com, amazon-adsystem.com, shb-sync.com, sync.adkernel.com, cookiesync.api.bliink.io, sync.cootlogix.com, openx.net, ib.adnxs.com, api.bliink.io", 111 ], // attribut custom de RVVN 112 "js": function() { 113 "use strict"; 114 tarteaucitron.fallback(['dailymotion_responsive'], function(x) { 115 var video_id = x.dataset.videoId || x.dataset.playlistId, 116 video_title = ((x.dataset.videoTitle || x.dataset.playlistTitle) ?? "").replaceAll('"', '"'), 117 video_frame, 118 embed_type = x.dataset.embedType, 119 params = 'info=1&autoPlay=' + x.dataset.autoplay; 120 121 if (video_id === undefined) { 122 return ""; 123 } 124 if (embed_type === undefined || !['video', 'playlist'].includes(embed_type)) { 125 embed_type = "video"; 126 } 127 video_frame = '<div class="TACVideoPlayer"><iframe title="(' + embed_type + ' Dailymotion) ' + video_title + '" src="//www.dailymotion.com/embed/' + embed_type + '/' + video_id + '?' + params + '" frameborder="0" allowfullscreen allow="mute; fullscreen; queue-enable;"></iframe></div>'; 128 return video_frame; 129 }); 130 }, 131 "fallback": function() { 132 "use strict"; 133 var id = 'dailymotionRVVN'; 134 tarteaucitron.fallback(['dailymotion_responsive'], function(elem) { 135 return tarteaucitron.engage(id); 136 }); 137 } 138}; 139tarteaucitron.services.vimeoRVVN = { 140 "key": "vimeoRVVN", 141 "type": "video", 142 "name": "Vimeo", 143 "uri": "https://vimeo.com/privacy", 144 "needConsent": true, 145 "cookies": ['__utmt_player', '__utma', '__utmb', '__utmc', '__utmv', 'vuid', '__utmz', 'player'], 146 "domains": ["vimeo.com", "vimeocdn.com", "www.gstatic.com"], // attribut custom de RVVN 147 "js": function() { 148 "use strict"; 149 tarteaucitron.fallback(['vimeo_responsive'], function(x) { 150 var video_id = x.dataset.videoId, 151 video_title = (x.dataset.videoTitle ?? "").replaceAll('"', '"'), 152 video_frame; 153 if (video_id === undefined) { 154 return ""; 155 } 156 157 video_frame = '<div class="TACVideoPlayer"><iframe title="(video Vimeo) ' + video_title + '" src="//player.vimeo.com/video/' + video_id + '" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div>'; 158 159 return video_frame; 160 }); 161 }, 162 "fallback": function() { 163 "use strict"; 164 var id = 'vimeoRVVN'; 165 tarteaucitron.fallback(['vimeo_responsive'], function(elem) { 166 return tarteaucitron.engage(id); 167 }); 168 } 169}; 170tarteaucitron.services.podeducRVVN = {
171 "key": "podeducRVVN", 172 "type": "video", 173 "name": "Podeduc", 174 "uri": "https://podeduc.apps.education.fr/mentions/", 175 "needConsent": true, 176 "cookies": ['_pk_id', '_pk_ref', '_pk_ses', 'activeCollapseAside', 'csrftoken', 'podCookieConsent'], 177 "domains": ["podeduc.apps.education.fr"], // attribut custom de RVVN 178 "js": function() { 179 "use strict"; 180 tarteaucitron.fallback(['podeduc_responsive'], function(x) { 181 var video_id = x.dataset.videoId, 182 video_title = (x.dataset.videoTitle ?? "").replaceAll('"', '"'), 183 video_frame; 184 if (video_id === undefined) { 185 return ""; 186 } 187 188 video_frame = '<div class="TACVideoPlayer"><iframe title="(video Podeduc) ' + video_title + '" src="//podeduc.apps.education.fr/video/' + video_id + '/?is_iframe=true" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div>'; 189 190 return video_frame; 191 }); 192 }, 193 "fallback": function() { 194 "use strict"; 195 var id = 'podeducRVVN'; 196 tarteaucitron.fallback(['podeduc_responsive'], function(elem) { 197 return tarteaucitron.engage(id); 198 }); 199 } 200}; 201tarteaucitron.services.openstreetmapRVVN = { 202 "key": "openstreetmapRVVN", 203 "type": "api", 204 "name": "Cartes OpenStreetMap et Umap", 205 "uri": "https://wiki.osmfoundation.org/wiki/Privacy_Policy", 206 "needConsent": true, 207 "cookies": [], 208 "domains": ["umap.openstreetmap.fr", "tile.osm.org", "js.entry-cdn.com"], // attribut custom de RVVN 209 "js": function() { 210 "use strict"; 211 212 // Cartes openstreetmap avec leaflet 213 // Ne charger le script que s'il y a présence de ".osm-simple" 214 // La carte openstreetmap avec leaflet présente dans le formulaire de signalement d'anomalie charge ses propres JS et CSS 215 if (document.body.querySelectorAll(".osm-simple").length != 0) { 216 tarteaucitron.addScript('/typo3conf/ext/rvvnfsccarto/Resources/Public/js/leaflet/leaflet.js', 'leaflet', function() { 217 218 if (document.head.querySelectorAll('link[href*="leaflet"]').length == 0) { 219 //console.log("pas de CSS leaflet chargée"); 220 var leaflet_css_link = document.createElement("link"); 221 leaflet_css_link.type = "text/css"; 222 leaflet_css_link.href = "/typo3conf/ext/rvvnfsccarto/Resources/Public/css/leaflet/leaflet.css"; 223 leaflet_css_link.rel = "stylesheet"; 224 document.head.appendChild(leaflet_css_link); 225 } 226 227 tarteaucitron.fallback(['osm-simple'], function(x) { 228 var mapOptions = { 229 id: x.getAttribute("id"), 230 latitude: parseFloat(x.dataset.latitude), 231 longitude: parseFloat(x.dataset.longitude), 232 zoomlevel: parseInt(x.dataset.zoomlevel), 233 leafletImagesPath: x.dataset.leafletImagesPath, 234 centralmarker: x.dataset.centralmarker, 235 centralmarkerText: x.dataset.centralmarkerText 236 }; 237 238 x.style.height = x.dataset.mapHeight + "px"; 239 240 function doTheMap(x, mapOptions) { 241 // on vide le contenu de l'encart TAC sinon il reste dans le code HTML "sous" la carte et 242 // cela créé un problème d'accessibilité car les boutons prennent le focus alors qu'ils sont cachés 243 x.innerHTML = ''; 244 245 L.DomEvent.disableClickPropagation(document.getElementById(x.getAttribute("id"))); 246 247 L.Icon.Default.imagePath = mapOptions.leafletImagesPath; 248 249 var map = L.map(mapOptions.id, { 250 center: [mapOptions.latitude, mapOptions.longitude], 251 zoom: mapOptions.zoomlevel, 252 zoomControl: false, 253 attributionControl: false 254 }); 255 L.control.zoom({ 256 zoomInTitle: "Augmenter le niveau de zoom", 257 zoomOutTitle: "Diminuer le niveau de zoom" 258 }).addTo(map); 259 260 L.control.attribution({ 261 prefix: '' 262 }).addTo(map); 263 264 // disable scroll-zooming initially 265 map.scrollWheelZoom.disable(); 266 267 var zoomTimer; 268 269 // on entering the map we're starting a timer to 270 // 3 seconds after which we'll enable scroll-zooming 271 map.on('mouseover', function() { 272 zoomTimer = setTimeout(function() { 273 map.scrollWheelZoom.enable(); 274 }, 3000); 275 }); 276 277 // on leaving the map we're disarming not yet triggered timers 278 // and disabling scrolling 279 map.on('mouseout', function() { 280 clearTimeout(zoomTimer); 281 map.scrollWheelZoom.disable(); 282 }); 283 284 L.tileLayer('https://{' + 's}.tile.osm.org/{' + 'z}/{' + 'x}/{' + 'y}.png', { 285 attribution: '© Données fournies par <a href="https://osm.org/copyright">OpenStreetMap</a>', 286 287 }).addTo(map); 288 289 map.whenReady(function() { 290 291 if (mapOptions.centralmarker == 1) { 292 let markerText = mapOptions.centralmarkerText || "Centre de la carte"; 293 294 let center = L.marker([mapOptions.latitude, mapOptions.longitude], {alt: markerText}).addTo(map); 295 296 center.bindPopup(markerText).openPopup(); 297 if (mapOptions.centralmarkerText == "") center.closePopup(); 298 center.getPopup().getElement().setAttribute("id", `${mapOptions.id}-popup`); 299 300 const centerElement = center.getElement(); 301 centerElement.setAttribute("title", "Afficher ou masquer l'infobulle de ce marqueur"); 302 centerElement.setAttribute("aria-controls", `${mapOptions.id}-popup`); 303 centerElement.setAttribute("aria-expanded", 304 center.isPopupOpen() 305 ? "true" 306 : "false" 307 ); 308 309 const status = document.querySelector(`#${mapOptions.id}-status`); 310 if(status) { 311 center.on('popupopen', function(ev) { 312 centerElement.setAttribute("aria-expanded", "true"); 313 status.innerHTML = ''; 314 315 const span = document.createElement('span'); 316 span.textContent = "Infobulle ouverte"; 317 318 status.appendChild(span); 319 320 const popupContentEl = center.getPopup().getElement().querySelector(".leaflet-popup-content"); 321 popupContentEl.setAttribute('tabindex', '-1');
322 popupContentEl.focus(); 323 }); 324 center.on('popupclose', function(ev) { 325 centerElement.setAttribute("aria-expanded", "false"); 326 status.innerHTML = ''; 327 328 const span = document.createElement('span'); 329 span.textContent = "Infobulle fermée"; 330 331 status.appendChild(span); 332 333 // bug de Leaflet : lorsqu'on ferme la popup, le focus ne retourne pas sur le marqueur 334 centerElement.focus(); 335 }); 336 } 337 } 338 }); 339 340 } // end of function doTheMap() 341 doTheMap(x, mapOptions); 342 343 }, true); 344 }); 345 } 346 347 // Cartes openstreetmap avec leaflet dans formulaire de signalement d'anomalie 348 tarteaucitron.fallback(['map-canvas-rvvnfscforms-incidentReport'], function(x) { 349 //console.log('map-canvas-rvvnfscforms-incidentReport'); 350 var mapOptions = { 351 id: x.getAttribute("id"), 352 latitude: parseFloat(x.dataset.latitude), 353 longitude: parseFloat(x.dataset.longitude), 354 zoomlevel: parseInt(x.dataset.zoomlevel), 355 leafletImagesPath: x.dataset.leafletImagesPath, 356 cursorPlaceMarker: x.dataset.cursorPlaceMarker, 357 ctrlPlaceMarker: x.dataset.ctrlPlaceMarker, 358 ctrlPlaceMarkerOn: x.dataset.ctrlPlaceMarkerOn, 359 coordinatesFieldId: x.dataset.coordinatesFieldId 360 }; 361 362 x.style.height = x.dataset.mapHeight + "px"; 363 364 //L.DomEvent.disableClickPropagation(document.getElementById(x.getAttribute("id"))); 365 366 var map = L.map(mapOptions.id, { 367 center: [mapOptions.latitude, mapOptions.longitude], 368 zoom: mapOptions.zoomlevel, 369 zoomControl: false, 370 attributionControl: false 371 }); 372 L.control.zoom({ 373 zoomInTitle: "Augmenter le niveau de zoom", 374 zoomOutTitle: "Diminuer le niveau de zoom" 375 }).addTo(map); 376 377 L.control.attribution({ 378 prefix: '' 379 }).addTo(map); 380 381 // disable scroll-zooming initially 382 map.scrollWheelZoom.disable(); 383 384 var zoomTimer; 385 386 // on entering the map we're starting a timer to 387 // 3 seconds after which we'll enable scroll-zooming 388 map.on('mouseover', function() { 389 zoomTimer = setTimeout(function() { 390 map.scrollWheelZoom.enable(); 391 }, 3000); 392 }); 393 394 // on leaving the map we're disarming not yet triggered timers 395 // and disabling scrolling 396 map.on('mouseout', function() { 397 clearTimeout(zoomTimer); 398 map.scrollWheelZoom.disable(); 399 }); 400 401 L.tileLayer('https://{' + 's}.tile.osm.org/{' + 'z}/{' + 'x}/{' + 'y}.png', { 402 attribution: '© Données fournies par <a href="http://osm.org/copyright">OpenStreetMap</a>', 403 404 }).addTo(map); 405 406 L.Control.GetCoordinates = L.Control.extend({ 407 onAdd: function(map) { 408 this.map = map; 409 this.mode = "off"; 410 411 this.leafIconClass = L.icon({ 412 iconUrl: mapOptions.leafletImagesPath + 'marker-icon.png', 413 iconSize: [50, 50], 414 iconAnchor: [25, 50] 415 }); 416 417 this.layerGroup = L.layerGroup().addTo(map); 418 419 this.coordinatesField = document.getElementById(mapOptions.coordinatesFieldId); 420 this.coordinatesField.style.display = "none"; 421 422 this.container = L.DomUtil.create('div', 'leaflet-bar leaflet-control leaflet-control-custom'); 423 this.container.title = "Géolocaliser le lieu de l'anomalie" 424 this.container.style.backgroundColor = 'white'; 425 this.container.style.backgroundRepeat = 'no-repeat'; 426 this.container.style.backgroundImage = 'url(' + mapOptions.ctrlPlaceMarker + ')'; 427 this.container.style.backgroundPosition = 'center'; 428 429 this.container.style.width = '64px'; 430 this.container.style.height = '64px'; 431 432 L.DomEvent 433 .on(this.container, 'click', L.DomEvent.stopPropagation) 434 .on(this.container, 'click', L.DomEvent.preventDefault) 435 .on(this.container, 'click', this._onClick, this) 436 .on(this.container, 'dblclick', L.DomEvent.stopPropagation); 437 438 // connect to mouseevents 439 //map.on("mousemove", this._update, this); 440 map.on("click", this._update, this); 441 map.whenReady(this._update, this); 442 443 return this.container; 444 }, 445 446 onRemove: function(map) { 447 // Nothing to do here 448 }, 449 450 _onClick: function() { 451 this.toggleMode(); 452 }, 453 454 _update: function(evt) { 455 var pos = evt.latlng; 456 if (pos && this.mode === "point") { 457 //pos = pos.wrap(); 458 this._currentPos = pos; 459 } 460 }, 461 462 toggleMode: function() { 463 if (this.mode === "point") { 464 this.mode = "off"; 465 this._map._container.style.cursor = ''; 466 this.container.style.backgroundColor = 'white'; 467 this.container.style.backgroundImage = 'url(' + mapOptions.ctrlPlaceMarker + ')'; 468 } else { 469 this.mode = "point"; 470 this._map._container.style.cursor = 'url(' + mapOptions.cursorPlaceMarker + ') 25 49, auto'; 471 this.container.style.backgroundColor = '#3498DB'; 472 this.container.style.backgroundImage = 'url(' + mapOptions.ctrlPlaceMarkerOn + ')'; 473 } 474 }, 475 476 placeMarker: function(evt) { 477 if (this.mode === "point") { 478 this.layerGroup.clearLayers(); 479 480 var markerOptions = { 481 icon: this.leafIconClass 482 }; 483 484 //var point = this.map.latLngToContainerPoint(this._currentPos); 485 //var newPoint = newPoint = L.point([point.x + 25, point.y + 50]); 486 //var pos = this.map.containerPointToLatLng(newPoint); 487 488 var marker = L.marker( 489 [this._currentPos.lat, this._currentPos.lng], 490 //[pos.lat, pos.lng], 491 markerOptions 492 ).addTo(this.layerGroup); 493 494 //this.coordinatesField.value = pos.lat +","+ pos.lng; 495 this.coordinatesField.value = this._currentPos.lat + "," + this._currentPos.lng; 496 this.toggleMode(); 497 } 498 }, 499 }); 500 501 L.control.GetCoordinates = function(opts) { 502 return new L.Control.GetCoordinates(opts); 503 } 504 505 var GetCoordinatesControl = L.control.GetCoordinates({ 506 position: 'bottomleft' 507 }).addTo(map); 508 509 map.on('click', function(evt) { 510 GetCoordinatesControl.placeMarker(evt); 511 }); 512 513 514 }, true); 515 516 // Cartes Umap 517 tarteaucitron.fallback(['umap-with-pois'], function(x) { 518 var map_id = x.dataset.mapId, 519 load_panel = x.dataset.loadPanel, 520 height = x.dataset.mapHeight, 521 iframe_title = (x.closest('[data-rvvnctype="map"]').dataset.rvvntitle ?? "").replaceAll('"', '"'), 522 map_frame; 523 if (map_id === undefined) { 524 return ""; 525 } 526 //x.style.height = "auto"; // Tarte au Citron fixe une hauteur si un attribut "height" ou "data-height" est renseigné 527 map_frame = '<div class="TACUmap"><iframe aria-hidden="true" tabindex="-1" width="100%" height="' + height + '" frameBorder="0" title="(Carte Umap) ' + iframe_title + '" src="https://umap.openstreetmap.fr/fr/map/' + map_id + '?scaleControl=true&miniMap=false&scrollWheelZoom=false&zoomControl=true&allowEdit=false&more
527Control=false&searchControl=null&tilelayersControl=null&embedControl=null&datalayersControl=true&onLoadPanel=' + load_panel + '&captionBar=false&fullscreenControl=false"></iframe></div>'; 528 return map_frame; 529 530 }); 531 }, 532 "fallback": function() { 533 "use strict"; 534 var id = 'openstreetmapRVVN'; 535 tarteaucitron.fallback(['osm-simple'], tarteaucitron.engage(id)); 536 tarteaucitron.fallback(['map-canvas-rvvnfscforms-incidentReport'], tarteaucitron.engage(id)); 537 tarteaucitron.fallback(['umap-with-pois'], tarteaucitron.engage(id)); 538 } 539}; 540tarteaucitron.services.opendatamelRVVN = { 541 "key": "opendatamelRVVN", 542 "type": "api", 543 "name": "Open Data Lille Métropole (Cartographies)", 544 "uri": "https://opendata.lillemetropole.fr/page/mentions-legales/", 545 "needConsent": true, 546 "cookies": [], 547 "domains": ["data.lillemetropole.fr", "basemaps.cartocdn.com", "cdn.jsdelivr.net"], // attribut custom de RVVN 548 "js": function() { 549 "use strict"; 550 tarteaucitron.fallback(['opendatalillemetropole'], function(x) { 551 var dataset_id = x.dataset.datasetId, 552 zoomlevel = x.dataset.zoomlevel, 553 latitude = x.dataset.latitude, 554 longitude = x.dataset.longitude, 555 height = x.dataset.mapHeight, 556 iframe_title = (x.closest('[data-rvvnctype="map"]').dataset.rvvntitle ?? "").replaceAll('"', '"'), 557 map_frame; 558 if (dataset_id === undefined) { 559 return ""; 560 } 561 //x.style.height = "auto"; // Tarte au Citron fixe une hauteur si un attribut "height" ou "data-height" est renseigné 562 map_frame = '<div class="TACopendatamel"><iframe aria-hidden="true" tabindex="-1" width="100%" height="' + height + '" frameborder="0" title="(Carte Open Data MEL) ' + iframe_title + '" src="https://data.lillemetropole.fr/catalogue/wc-embedder.html?v=v2.4.5&e=gn-dataset-view-map&a=api-url%3D%2Fgeonetwork%2Fsrv%2Fapi&a=dataset-id%3D' + dataset_id + '&a=primary-color%3D%230f4395&a=secondary-color%3D%238bc832&a=main-color%3D%23555&a=background-color%3D%23fdfbff"></</iframe></div>'; 563 return map_frame; 564 565 }); 566 }, 567 "fallback": function() { 568 "use strict"; 569 var id = 'opendatamelRVVN'; 570 tarteaucitron.fallback(['opendatalillemetropole'], tarteaucitron.engage(id)); 571 } 572}; 573 574(tarteaucitron.job = tarteaucitron.job || []).push('podeducRVVN'); 575(tarteaucitron.job = tarteaucitron.job || []).push('vimeoRVVN'); 576(tarteaucitron.job = tarteaucitron.job || []).push('dailymotionRVVN'); 577(tarteaucitron.job = tarteaucitron.job || []).push('youtubeRVVN'); 578(tarteaucitron.job = tarteaucitron.job || []).push('openstreetmapRVVN'); 579(tarteaucitron.job = tarteaucitron.job || []).push('opendatamelRVVN'); 580 581/* Contenus HTML custom ********************************************************************/ 582 583/********************/ 584/* timelapsegoBox */ 585/********************/ 586tarteaucitron.services.timelapsegoBoxRVVN = { 587 "key": "timelapsegoBoxRVVN", 588 "type": "other", 589 "name": "Webcam de suivi de chantier Timelapsego", 590 "uri": "https://timelapsego.com/", 591 "needConsent": true, 592 "cookies": [], 593 "domains": [ 594 "prodtimelapsego.com", 595 "rsms.me", 596 "amazonaws.com", 597 "www.googletagmanager.com" 598 ], // attribut custom de RVVN 599 "js": function () { 600 "use strict"; 601 tarteaucitron.fallback(['timelapsegoBox'], function (x) { 602 var timelapsegoID = x.dataset.timelapsegoId, 603 timelapsegoToken = x.dataset.timelapsegoToken, 604 iframe; 605 if (timelapsegoID === undefined || timelapsegoToken === undefined) { 606 return ""; 607 } 608 iframe = '<div class="TACIframe"><iframe src="https://prod.timelapsego.com/embed/company/box/' + timelapsegoID + '/fs?accesstoken=' + timelapsegoToken + '" title="Webcam de suivi de chantier" allowfullscreen frameborder="0"></iframe></div>'; 609 610 return iframe; 611 }); 612 }, 613 "fallback": function () { 614 "use strict"; 615 var id = 'timelapsegoBoxRVVN'; 616 tarteaucitron.fallback(['timelapsegoBox'], function (elem) { 617 return tarteaucitron.engage(id); 618 }); 619 } 620}; 621 622 623/*****************************/ 624/* timelapsego Avant Après */ 625/*****************************/ 626tarteaucitron.services.timelapsegoBefterRVVN = {
627 "key": "timelapsegoBefterRVVN", 628 "type": "other", 629 "name": "Avant / Après de suivi de chantier Timelapsego", 630 "uri": "https://timelapsego.com/", 631 "needConsent": true, 632 "cookies": [], 633 "domains": [ 634 "prodtimelapsego.com", 635 "rsms.me", 636 "amazonaws.com", 637 "www.googletagmanager.com" 638 ], // attribut custom de RVVN 639 "js": function () { 640 "use strict"; 641 tarteaucitron.fallback(['timelapsegoBefter'], function (x) { 642 var timelapsegoID = x.dataset.timelapsegoId, 643 timelapsegoToken = x.dataset.timelapsegoToken, 644 timelapsegoBefore = x.dataset.timelapsegoBefore, 645 timelapsegoAfter = x.dataset.timelapsegoAfter, 646 iframe; 647 if (timelapsegoID === undefined || timelapsegoToken === undefined) { 648 return ""; 649 } 650 if (timelapsegoAfter === undefined || timelapsegoAfter == null) { 651 timelapsegoAfter = "x"; 652 } 653 iframe = '<div class="TACIframe"><iframe src="https://prod.timelapsego.com/embed/company/box/' + timelapsegoID + '/fs/compare/' + timelapsegoBefore + '/' + timelapsegoAfter + '?accesstoken=' + timelapsegoToken + '" title="Module de comparaison avant et après travaux" allowfullscreen frameborder="0"></iframe></div>'; 654 655 return iframe; 656 }); 657 }, 658 "fallback": function () { 659 "use strict"; 660 var id = 'timelapsegoBefterRVVN'; 661 tarteaucitron.fallback(['timelapsegoBefter'], function (elem) { 662 return tarteaucitron.engage(id); 663 }); 664 } 665}; 666 667 668/********************/ 669/* SPL XDemat Actes */ 670/********************/ 671tarteaucitron.services.xdematActesRVVN = { 672 "key": "xdematActesRVVN", 673 "type": "other", 674 "name": "Affichage des actes de la SPL xDemat", 675 "uri": "https://www.spl-xdemat.fr", 676 "needConsent": true, 677 "cookies": [], 678 "domains": ["opendata.spl-xdemat.fr"], // attribut custom de RVVN 679 "js": function () { 680 "use strict"; 681 tarteaucitron.fallback(['xdematActes'], function (x) { 682 var xdematActesID = x.dataset.xdematActesId, 683 iframe; 684 if (xdematActesID === undefined) { 685 return ""; 686 } 687 iframe = '<div class="TACIframe"><iframe title="Affichage légal par la SPL XDemat" src="https://opendata.spl-xdemat.fr/frame/' + xdematActesID + '/affichage-administratif" frameborder="0"></iframe></div>'; 688 689 return iframe; 690 }); 691 }, 692 "fallback": function () { 693 "use strict"; 694 var id = 'xdematActesRVVN'; 695 tarteaucitron.fallback(['xdematActes'], function (elem) { 696 return tarteaucitron.engage(id); 697 }); 698 } 699}; 700 701 702/******************/ 703/* Panneau Pocket */ 704/******************/ 705tarteaucitron.services.panneauPocketRVVN = { 706 "key": "panneauPocketRVVN", 707 "type": "other", 708 "name": "Panneau Pocket", 709 "uri": "https://app.panneaupocket.com/mentions-legales", 710 "needConsent": true, 711 "cookies": [], 712 "domains": ["app.panneaupocket.com", "fonts.googleapis.com"], // attribut custom de RVVN 713 "js": function () { 714 "use strict"; 715 tarteaucitron.fallback(['panneauPocket'], function (x) { 716 var panneauPocketID = x.dataset.panneaupocketId, 717 iframe; 718 if (panneauPocketID === undefined) { 719 return ""; 720 } 721 iframe = '<div class="TACIframe"><iframe title="Actualités fournies par l\'application mobile PanneauPocket" src="https://app.panneaupocket.com/embeded/' + panneauPocketID + '" height="518" width="100%" frameborder="0"></iframe></div>'; 722 723 return iframe; 724 }); 725 }, 726 "fallback": function () { 727 "use strict"; 728 var id = 'panneauPocketRVVN'; 729 tarteaucitron.fallback(['panneauPocket'], function (elem) { 730 return tarteaucitron.engage(id); 731 }); 732 } 733}; 734 735 736/************************/ 737/* PassPass Covoiturage */ 738/************************/ 739tarteaucitron.services.passpasscovoiturageRVVN = { 740 "key": "passpasscovoiturageRVVN", 741 "type": "other", 742 "name": "Pass Pass Covoiturage", 743 "uri": "https://passpasscovoiturage.fr/cgu", 744 "needConsent": true, 745 "cookies": ['_ga'], 746 "domains": ["passpasscovoiturage.fr"], // attribut custom de RVVN 747 "js": function () { 748 "use strict"; 749 tarteaucitron.fallback(['passpasscovoiturage'], function (x) { 750 var communauteID = x.dataset.communauteId, 751 iframe; 752 if (communauteID === undefined) { 753 return ""; 754 } 755 iframe = '<div class="TACIframe"><iframe title="Trouvez un covoiturage avec Pass Pass Covoiturage" src="https://passpasscovoiturage.fr/communaute/widget/' + communauteID + '" width="100%" height="640px" frameborder="0" scrolling="no"></iframe></div>'; 756 return iframe; 757 }); 758 }, 759 "fallback": function () { 760 "use strict"; 761 var id = 'passpasscovoiturageRVVN'; 762 tarteaucitron.fallback(['passpasscovoiturage'], function (elem) { 763 return tarteaucitron.engage(id); 764 }); 765 } 766}; 767 768 769/****************/ 770/* Centolive v3 */ 771/****************/ 772tarteaucitron.services.centoliveRVVN = {
773 "key": "centoliveRVVN", 774 "type": "other", 775 "name": "Centolive", 776 "uri": "https://www.centaure-systems.fr/confidentialite/", 777 "needConsent": true, 778 "cookies": ['_ga'], 779 "domains": ["centoweb.centaure-systems.fr", "themes.googleusercontent.com"], // attribut custom de RVVN 780 "js": function () { 781 "use strict"; 782 tarteaucitron.fallback(['centolive'], function (x) { 783 var centoliveID = x.dataset.centoliveId, 784 iframe; 785 if (centoliveID === undefined) { 786 return ""; 787 } 788 iframe = '<div class="TACIframe"><iframe title="Reprise du panneau d\'affichage physique Centolive" src="https://centoweb.centaure-systems.fr/embedded/' + centoliveID + '" frameborder="0"></iframe></div>'; 789 return iframe; 790 }); 791 }, 792 "fallback": function () { 793 "use strict"; 794 var id = 'centoliveRVVN'; 795 tarteaucitron.fallback(['centolive'], function (elem) { 796 return tarteaucitron.engage(id); 797 }); 798 } 799}; 800 801/****************/ 802/* Centolive v4 */ 803/****************/ 804tarteaucitron.services.centolivev4RVVN = { 805 "key": "centolivev4RVVN", 806 "type": "other", 807 "name": "Centolive v4", 808 "uri": "https://www.centaure-systems.fr/confidentialite/", 809 "needConsent": true, 810 "cookies": ['_ga'], 811 "domains": ["centoweb4.centaure-systems.fr"], // attribut custom de RVVN 812 "js": function () { 813 "use strict"; 814 tarteaucitron.fallback(['centolivev4'], function (x) { 815 var centoliveID = x.dataset.centoliveId, 816 iframe; 817 if (centoliveID === undefined) { 818 return ""; 819 } 820 iframe = '<div class="TACIframe"><iframe title="Reprise du panneau d\'affichage physique Centolive" src="https://centoweb4.centaure-systems.fr/panel/panel_web/' + centoliveID + '" frameborder="0"></iframe></div>'; 821 return iframe; 822 }); 823 }, 824 "fallback": function () { 825 "use strict"; 826 var id = 'centolivev4RVVN'; 827 tarteaucitron.fallback(['centolivev4'], function (elem) { 828 return tarteaucitron.engage(id); 829 }); 830 } 831}; 832 833 834/*******************/ 835/* Google Calendar */ 836/*******************/ 837tarteaucitron.services.googleCalendarRVVN = { 838 "key": "googleCalendarRVVN", 839 "type": "api", 840 "name": "Google Calendar", 841 "uri": "https://support.google.com/calendar/answer/10366125?hl=fr", 842 "needConsent": true, 843 "cookies": ['1p_jar', 'anid', 'apisid', 'compass', 'consent', 'hsid', 'nid', 'ogpc', 'osid', 'sapisid', 'sid', 'sidcc', 'ssid'], 844 "domains": ["apis.google.com", "calendar.google.com", "clients6.google.com", "play.google.com", "www.gstatic.com", "fonts.gstatic.com"], // attribut custom de RVVN 845 "js": function () { 846 "use strict"; 847 tarteaucitron.fallback(['googleCalendar'], function (x) { 848 var googleCalendarID = x.dataset.googleCalendarId, 849 iframe, 850 iframe_title = x.dataset.title ?? "Calendrier Google de la salle des fêtes"; 851 if (googleCalendarID === undefined) { 852 return ""; 853 } 854 iframe = '<div class="TACIframe"><iframe title="' + iframe_title + '" src="https://calendar.google.com/calendar/b/1/embed?wkst=2&bgcolor=%23f0f0f0&ctz=Europe%2FParis&src=' + googleCalendarID + '&color=%23DD5511&showTitle=0&showNav=1&showDate=1&showPrint=0&showTabs=0&showCalendars=0&showTz=0" frameborder="0"></iframe></div>'; 855 return iframe; 856 }); 857 }, 858 "fallback": function () { 859 "use strict"; 860 var id = 'googleCalendarRVVN'; 861 tarteaucitron.fallback(['googleCalendar'], function (elem) { 862 return tarteaucitron.engage(id); 863 }); 864 } 865}; 866 867 868/**********/ 869/* TIMIFY */ 870/**********/ 871tarteaucitron.services.timifyRVVN = { 872 "key": "timifyRVVN", 873 "type": "other", 874 "name": "TIMIFY", 875 "uri": "https://www.timify.com/fr-fr/legal/", 876 "needConsent": true, 877 "cookies": ['intercom-id-xxxxx'], 878 "domains": ["api-public.timify.io", "book.timify.com", "cdn.timify.com", "maps.googleapis.com"], // attribut custom de RVVN 879 "js": function () { 880 "use strict"; 881 tarteaucitron.fallback(['timify'], function (x) { 882 var timifyID = x.dataset.timifyId, 883 iframe; 884 if (timifyID === undefined) { 885 return ""; 886 } 887 iframe = '<div class="TACIframe"><iframe title="Module de réservation en ligne Timify" src="https://book.timify.com/services?accountId=' + timifyID + '&fullscreen=1&hideCloseButton=1&locale=fr-fr" width="100%" height="600" frameborder="0"></iframe></div>'; 888 return iframe; 889 }); 890 }, 891 "fallback": function () { 892 "use strict"; 893 var id = 'timifyRVVN'; 894 tarteaucitron.fallback(['timify'], function (elem) { 895 return tarteaucitron.engage(id); 896 }); 897 } 898}; 899 900 901/*************/ 902/* RDV360 v3 */ 903/*************/ 904tarteaucitron.services.rdv360v3RVVN = {
905 "key": "rdv360v3RVVN", 906 "type": "other", 907 "name": "RDV360 (v3)", 908 "uri": "https://www.rdv360.com/cgu/", 909 "needConsent": true, 910 "cookies": ['os_visitor', '__stripe_mid'], 911 "domains": ["www.rdv360.com", "apiv2.rdv360.com", "js.stripe.com", "m.stripe.com", "m.stripe.network"], // attribut custom de RVVN 912 "js": function () { 913 "use strict"; 914 tarteaucitron.fallback(['rdv360v3'], function (x) { 915 var rdv360apiKey = x.dataset.rdv360ApiKey, 916 html; 917 if (rdv360apiKey === undefined) { 918 return ""; 919 } 920 html = '<div class="TACIframe"><link href="https://www.rdv360.com/widget/dist/app_v3.css" rel="stylesheet"><div class="rdv360-widget" data-apikey="' + rdv360apiKey + '"></div></div>'; 921 return html; 922 }); 923 const rdv360v3FirstElement = document.querySelector('.TAC.rdv360v3'); 924 if (rdv360v3FirstElement !== null) { 925 tarteaucitron.addScript('//www.rdv360.com/widget/dist/app_vuidget_v3.js', 'rdv360v3'); 926 } 927 }, 928 "fallback": function () { 929 "use strict"; 930 var id = 'rdv360v3RVVN'; 931 tarteaucitron.fallback(['rdv360v3'], function (elem) { 932 return tarteaucitron.engage(id); 933 }); 934 } 935}; 936 937 938/***********/ 939/* SynBird */ 940/***********/ 941tarteaucitron.services.synbirdRVVN = { 942 "key": "synbirdRVVN", 943 "type": "other", 944 "name": "SynBird", 945 "uri": "https://www.synbird.com/fr/conditions-generales-dutilisation/", 946 "needConsent": true, 947 "cookies": [], 948 "domains": ["auth.synbird.com", "widgets.synbird.com", "ws.synbird.com"], // attribut custom de RVVN 949 "js": function () { 950 "use strict"; 951 tarteaucitron.fallback(['synbird'], function (x) { 952 var companyID = x.dataset.companyId, 953 scriptID = x.dataset.scriptId, 954 activities = x.dataset.activities, 955 prestations = x.dataset.prestations, 956 places = x.dataset.places, 957 html; 958 if (companyID === undefined) { 959 return ""; 960 } 961 scriptID = scriptID !== undefined ? `data-script-id="${scriptID}"` : ""; 962 // data-activities="[2578]" data-prestations="[13641,13643,13640]" data-places="[2591] 963 activities = activities !== undefined ? `data-activities="[${activities}]"` : ""; 964 prestations = prestations !== undefined ? `data-prestations="[${prestations}]"` : ""; 965 places = places !== undefined ? `data-places="[${places}]"` : ""; 966 967 html = '<div class="TACIframe"><div class="synbird-widget" data-id-professional-company="' + companyID + '" ' + scriptID + ' ' + activities + ' ' + prestations + ' ' + places + '> <a href="https://app.synbird.com/p/' + companyID + '" style="text-align: center; display: block;"><img height="150" src="https://images.synbird.com/public/logo_synbird_small.png" style=" margin-top: 20px" /></a></div></div>'; 968 return html; 969 }); 970 const synbirdFirstElement = document.querySelector('.TAC.synbird'); 971 if (synbirdFirstElement !== null) { 972 tarteaucitron.addScript('//ws.synbird.com/widget.js', 'synbird'); 973 } 974 }, 975 "fallback": function () { 976 "use strict"; 977 var id = 'synbirdRVVN'; 978 tarteaucitron.fallback(['synbird'], function (elem) { 979 return tarteaucitron.engage(id); 980 }); 981 } 982}; 983 984 985/*************/ 986/* Publidata */ 987/*************/ 988tarteaucitron.services.publidataRVVN = { 989 "key": "publidataRVVN", 990 "type": "other", 991 "name": "Publidata", 992 "uri": "https://www.publidata.io/legal/", 993 "needConsent": true, 994 "cookies": ["intercom-device-id-ua54a2c7", "intercom-session-ua54a2c7"], 995 "domains": [ 996 "Pour Publidata : analytics.publidata.io, api.publidata.io, cdn.publidata.io, citizen.publidata.io, medias.publidata.io, next.publidata.io, store.publidata.io, widgets.publidata.io", 997 "Pour Amazon : publidata-prod.s3.amazonaws.com ,publidata-prod.s3-eu-west-1.amazonaws.com", 998 "Pour Fontawesome : api.fontawesome.com, ka-p.fontawesome.com, kit.fontawesome.com", 999 "Pour Google : fonts.googleapis.com", 1000 "Pour Mapbox : api.mapbox.com, events.mapbox.com", 1001 "Pour les autres partenaires de Publidata : icons.batch.com ,via.batch.com, infos.siaved.fr, ingest.sentry.io, www.datadoghq-browser-agent.com" 1002 ], // attribut custom de RVVN 1003 "js": function () { 1004 "use strict"; 1005 tarteaucitron.fallback(['publidata'], function (x) { 1006 var companyID = x.dataset.companyId, 1007 html; 1008 if (companyID === undefined) { 1009 return ""; 1010 } 1011 html = '<div class="TACIframe"><div class="publidata-widget-container widget-id-' + companyID + '"><a target="_blank" class="external-link" rel="external noopener noreferrer" href="https://widgets.publidata.io/' + companyID + '">AcceÌder au widget de collecte des deÌchets</a></div></div>'; 1012 return html; 1013 }); 1014 const publidataFirstElement = document.querySelector('.TAC.publidata'); 1015 if (publidataFirstElement !== null) { 1016 tarteaucitron.addScript('//cdn.publidata.io/publidata.js', 'publidata'); 1017 } 1018 }, 1019 "fallback": function () { 1020 "use strict"; 1021 var id = 'publidataRVVN'; 1022 tarteaucitron.fallback(['publidata'], function (elem) { 1023 return tarteaucitron.engage(id); 1024 }); 1025 } 1026}; 1027 1028 1029/******************/ 1030/* PubliAct */ 1031/******************/ 1032tarteaucitron.services.publiActRVVN = {
1033 "key": "publiActRVVN", 1034 "type": "other", 1035 "name": "PubliAct", 1036 "uri": "https://publiact.fr/privacy", 1037 "needConsent": true, 1038 "cookies": [], 1039 "domains": ["publiact.fr"], // attribut custom de RVVN 1040 "js": function () { 1041 "use strict"; 1042 tarteaucitron.fallback(['publiAct'], function (x) { 1043 var publiActID = x.dataset.publiactId, 1044 iframe; 1045 if (publiActID === undefined) { 1046 return ""; 1047 } 1048 iframe = '<div class="TACIframe"><div class="publiact" data-key="' + publiActID + '"></div></div>'; 1049 1050 return iframe; 1051 }); 1052 //tarteaucitron.addScript('https://publiact.fr/files/public/integration/script.js'); 1053 /*tarteaucitron.addScript('https://publiact.fr/files/public/integration/script.js', 'publiact', function() { 1054 1055 });*/ 1056 //document.addEventListener("DOMContentLoaded", function() { 1057 //console.log("DOMContentLoaded"); 1058 //}); 1059 if (typeof publiactDefault === 'undefined') { 1060 var publiactDefault = { 1061 url: 'https://publiact.fr/i/', 1062 // url: 'http://dev.publiactes.fr/i/', 1063 // url: 'http://localhost:3000/i/', 1064 style: { 1065 width: '100%', 1066 height: '660px', 1067 } 1068 } 1069 //document.addEventListener("DOMContentLoaded", function() { // Cet évènement n'est pas déclenché 1070 let elements = document.getElementsByClassName('publiact'); 1071 1072 for (let i = 0; i < elements.length; i++) { 1073 let element = elements[i]; 1074 1075 // Check si élément vide 1076 if (element.innerHTML.trim().length === 0) { 1077 let key = element.dataset.key; 1078 element.innerHTML = "<iframe title='Affichage légal par la société PubliAct' src='" + publiactDefault.url + key + "' style='border: none;width: " + publiactDefault.style.width + "; height:" + publiactDefault.style.height + ";'></iframe>"; 1079 } 1080 } 1081 //}); 1082 } 1083 }, 1084 "fallback": function () { 1085 "use strict"; 1086 var id = 'publiActRVVN'; 1087 tarteaucitron.fallback(['publiAct'], function (elem) { 1088 return tarteaucitron.engage(id); 1089 }); 1090 } 1091}; 1092 1093/********/ 1094/* ATMO */ 1095/********/ 1096tarteaucitron.services.atmoRVVN = { 1097 "key": "atmoRVVN", 1098 "type": "other", 1099 "name": "ATMO", 1100 "uri": "https://www.atmo-hdf.fr/article/donnees-personnelles", 1101 "needConsent": true, 1102 "cookies": ['__cf_bm'], 1103 "domains": ["www.atmo-hdf.fr", "fonts.googleapis.com", "fonts.gstatic.com", "www.clarity.ms", "o.clarity.ms"], // attribut custom de RVVN 1104 "js": function () { 1105 "use strict"; 1106 tarteaucitron.fallback(['atmo'], function (x) { 1107 var atmoID = x.dataset.atmoId, 1108 iframe; 1109 if (atmoID === undefined) { 1110 return ""; 1111 } 1112 iframe = '<div class="TACIframe"><iframe title="Module de qualité de l\'air des Hauts de France" src="https://www.atmo-hdf.fr/widget-mon-air/widget/commune/' + atmoID + '" frameborder="0"></iframe></div>'; 1113 return iframe; 1114 }); 1115 }, 1116 "fallback": function () { 1117 "use strict"; 1118 var id = 'atmoRVVN'; 1119 tarteaucitron.fallback(['atmo'], function (elem) { 1120 return tarteaucitron.engage(id); 1121 }); 1122 } 1123};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.