// wait for document to be ready document.addEventListener("DOMContentLoaded", function(event) { let bodhisvgsReplacements = 0; function bodhisvgsReplace(img) { // must be an image if( img.nodeName !== 'IMG' ){ return; } var imgID = img.id; var imgClass = img.classList; var imgURL = img.src; // must be svg if( !imgURL.endsWith('svg') ){ return; } var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200){ data = xmlHttp.responseText; let parser = new DOMParser(); const doc = parser.parseFromString(data, 'text/html'); // get svg now var svg = doc.getElementsByTagName('svg')[0]; var svgID = svg.id; // Add replaced image's ID to the new SVG if necessary if( typeof imgID === 'undefined' ){ if( typeof svgID === 'undefined' ) { imgID = 'svg-replaced-'+bodhisvgsReplacements; svg.setAttribute('id', imgID); } else { imgID = svgID; } } else { svg.setAttribute('id', imgID); } // Add replaced image's classes to the new SVG if(typeof imgClass !== 'undefined') { svg.setAttribute('class', imgClass+' replaced-svg svg-replaced-'+bodhisvgsReplacements); } // Remove any invalid XML tags as per http://validator.w3.org svg.removeAttribute('xmlns:a'); if(frontSanitizationEnabled == 'on' && svg["outerHTML"] != "") { // Is sanitization enabled? var svg = DOMPurify.sanitize(svg.outerHTML); // Sanitize SVG code via DOMPurify library img.outerHTML = svg; // Replacing img tag with new SVG sanitized content } else { // Replace image with new SVG img.replaceWith(svg); } bodhisvgsReplacements++; } } xmlHttp.open("GET", imgURL, false); xmlHttp.send(null); } function bodhisvgsIterator(node) { if( node.childNodes.length > 0 ){ for (var i = 0; i < node.childNodes.length; i++) { if( node.childNodes[i].nodeName == 'IMG' ){ // its an image... replace it too var img = node.childNodes[i]; bodhisvgsReplace(img); }else{ // go to another level bodhisvgsIterator(node.childNodes[i]); } } } } // Wrap in IIFE so that it can be called again later as bodhisvgsInlineSupport(); (bodhisvgsInlineSupport = function() { // If force inline SVG option is active then add class if ( ForceInlineSVGActive === 'true' ) { var allImages = document.getElementsByTagName('img'); // find all images on page // loop on images for(var i = 0; i < allImages.length ; i++) { if( typeof allImages[i].src !== 'undefined' ){ // check if it has svg if( allImages[i].src.match(/\.(svg)/) ){ // add our class - if not already added if( !allImages[i].classList.contains(cssTarget.ForceInlineSVG) ){ // add class now allImages[i].classList.add(cssTarget.ForceInlineSVG); } } } } } // Polyfill to support all ye old browsers // delete when not needed in the future if (!String.prototype.endsWith) { String.prototype.endsWith = function(searchString, position) { var subjectString = this.toString(); if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) { position = subjectString.length; } position -= searchString.length; var lastIndex = subjectString.lastIndexOf(searchString, position); return lastIndex !== -1 && lastIndex === position; }; } // end polyfill // Another snippet to support IE11 String.prototype.endsWith = function(pattern) { var d = this.length - pattern.length; return d >= 0 && this.lastIndexOf(pattern) === d; }; // End snippet to support IE11 // Check to see if user set alternate class if ( ForceInlineSVGActive === 'true' ) { var target = ( cssTarget.Bodhi !== 'img.' ? cssTarget.ForceInlineSVG : 'style-svg' ); } else { var target = ( cssTarget !== 'img.' ? cssTarget : 'style-svg' ); } // remove .img from class target = target.replace("img.",""); var allImages = document.getElementsByClassName(target); // find all images with force svg class for(var i = 0; i < allImages.length ; i++) { if( typeof allImages[i].src == 'undefined' ){ // not an image bodhisvgsIterator(allImages[i]); }else{ var img = allImages[i]; bodhisvgsReplace(img); } } })(); // Execute immediately }); NOS EVENTS – M TRAVEL
OUR EVENTS

Because our main intention is to provide you with an impeccable service, you can count on an unwavering commitment from us more than ever before!

Notre plus belle fierté est tout simplement votre fidélité et les liens que nous tissons jour après jour, évènement après évènement.

We exist for and because of our clients!
Here are a few event references and our client references.

We exist for and because of our clients!
Here are a few event references and our client references.

en_USEnglish