/(function($){ Drupal.behaviors.block_carousel = { attach: function (context, settings) { if ($('.page-node .owl-carousel-rte').length) { $('.owl-carousel-rte').owlCarousel({ pagination: false, navigation: true, // Show next and prev buttons slideSpeed: 300, paginationSpeed: 400, singleItem: true, // "singleItem:true" is a shortcut for: // items : 1, // itemsDesktop : false, // itemsDesktopSmall : false, // itemsTablet: false, itemsMobile: false }); } } }; })(jQuery); ;/*})'"*/ ;/*})'"*/ (function ($) { // Store the original beforeSerialize, as we want to continue using // it after we've overridden it. Drupal.ajax.prototype.originalBeforeSerialize = Drupal.ajax.prototype.beforeSerialize; /** * Override core's beforeSerialize. * * We switch to using GET if this is for an ajax View. * We also avoid adding ajax_html_id and ajax_page_state. * (This happens in core's beforeSerialize). */ Drupal.ajax.prototype.beforeSerialize = function (element, options) { // If this is for a view, switch to GET. if (options.url && options.url.indexOf('/views/ajax') !== -1 && Drupal.settings.viewsAjaxGet && $.inArray(options.data.view_name, Drupal.settings.viewsAjaxGet) !== -1) { // @See Drupal.ajax.prototype.beforeSerialize if (this.form) { var settings = this.settings || Drupal.settings; Drupal.detachBehaviors(this.form, settings, 'serialize'); } options.type = 'GET'; return; } return this.originalBeforeSerialize(element, options); }; })(jQuery); ;/*})'"*/ ;/*})'"*/ /** * @file views_load_more.js * * Handles the AJAX pager for the view_load_more plugin. */ (function ($) { /** * Provide a series of commands that the server can request the client perform. */ Drupal.ajax.prototype.commands.viewsLoadMoreAppend = function (ajax, response, status) { // Get information from the response. If it is not there, default to // our presets. var wrapper = response.selector ? $(response.selector) : $(ajax.wrapper); var method = response.method || ajax.method; var targetList = response.targetList || ''; var effect = ajax.getEffect(response); var pager_selector = response.options.pager_selector ? response.options.pager_selector : '.pager-load-more'; // We don't know what response.data contains: it might be a string of text // without HTML, so don't rely on jQuery correctly iterpreting // $(response.data) as new HTML rather than a CSS selector. Also, if // response.data contains top-level text nodes, they get lost with either // $(response.data) or $('
').replaceWith(response.data). var new_content_wrapped = $('
').html(response.data); var new_content = new_content_wrapped.contents(); // For legacy reasons, the effects processing code assumes that new_content // consists of a single top-level element. Also, it has not been // sufficiently tested whether attachBehaviors() can be successfully called // with a context object that includes top-level text nodes. However, to // give developers full control of the HTML appearing in the page, and to // enable Ajax content to be inserted in places where DIV elements are not // allowed (e.g., within TABLE, TR, and SPAN parents), we check if the new // content satisfies the requirement of a single top-level element, and // only use the container DIV created above when it doesn't. For more // information, please see http://drupal.org/node/736066. if (new_content.length != 1 || new_content.get(0).nodeType != 1) { new_content = new_content_wrapped; } // If removing content from the wrapper, detach behaviors first. var settings = response.settings || ajax.settings || Drupal.settings; Drupal.detachBehaviors(wrapper, settings); if ($.waypoints != undefined) { $.waypoints('refresh'); } // Set up our default query options. This is for advance users that might // change there views layout classes. This allows them to write there own // jquery selector to replace the content with. // Provide sensible defaults for unordered list, ordered list and table // view styles. var content_query = targetList && !response.options.content ? '> .view-content ' + targetList : response.options.content || '> .view-content'; // If we're using any effects. Hide the new content before adding it to the DOM. if (effect.showEffect != 'show') { new_content.find(content_query).children().hide(); } // Update the pager // Find both for the wrapper as the newly loaded content the direct child // .item-list in case of nested pagers wrapper.find(pager_selector).replaceWith(new_content.find(pager_selector)); // Add the new content to the page. wrapper.find(content_query)[method](new_content.find(content_query).children()); // Re-class the loaded content. // @todo this is faulty in many ways. first of which is that user may have configured view to not have these classes at all. wrapper.find(content_query).children() .removeClass('views-row-first views-row-last views-row-odd views-row-even') .filter(':first') .addClass('views-row-first') .end() .filter(':last') .addClass('views-row-last') .end() .filter(':even') .addClass('views-row-odd') .end() .filter(':odd') .addClass('views-row-even') .end(); if (effect.showEffect != 'show') { wrapper.find(content_query).children(':not(:visible)')[effect.showEffect](effect.showSpeed); } // Additional processing over new content wrapper.trigger('views_load_more.new_content', new_content.clone()); // Attach all JavaScript behaviors to the new content // Remove the Jquery once Class, TODO: There needs to be a better // way of doing this, look at .removeOnce() :-/ var classes = wrapper.attr('class'); var onceClass = classes.match(/jquery-once-[0-9]*-[a-z]*/); wrapper.removeClass(onceClass[0]); settings = response.settings || ajax.settings || Drupal.settings; Drupal.attachBehaviors(wrapper, settings); }; /** * Attaches the AJAX behavior to Views Load More waypoint support. */ Drupal.behaviors.ViewsLoadMore = { attach: function (context, settings) { var default_opts = { offset: '100%' }; if (settings && settings.viewsLoadMore && settings.views && settings.views.ajaxViews) { $.each(settings.viewsLoadMore, function(i, setting) { var view = '.view-id-' + setting.view_name + '.view-display-id-' + setting.view_display_id + ' .pager-next a', opts = {}; $.extend(opts, default_opts, settings.viewsLoadMore[i].opts); $(view).waypoint('destroy'); $(view).waypoint(function(event, direction) { $(view).click(); }, opts); }); } }, detach: function (context, settings, trigger) { if (settings && settings.viewsLoadMore && settings.views && settings.views.ajaxViews) { $.each(settings.viewsLoadMore, function(i, setting) { var view = '.view-id-' + setting.view_name + '.view-display-id-' + setting.view_display_id; if ($(context).is(view)) { $('.pager-next a', view).waypoint('destroy'); } else { $(view, context).waypoint('destroy'); } }); } } }; })(jQuery); ;/*})'"*/ ;/*})'"*/ /** * @file * Some basic behaviors and utility functions for Views. */ (function ($) { Drupal.Views = {}; /** * JQuery UI tabs, Views integration component. */ Drupal.behaviors.viewsTabs = { attach: function (context) { if ($.viewsUi && $.viewsUi.tabs) { $('#views-tabset').once('views-processed').viewsTabs({ selectedClass: 'active' }); } $('a.views-remove-link').once('views-processed').click(function(event) { var id = $(this).attr('id').replace('views-remove-link-', ''); $('#views-row-' + id).hide(); $('#views-removed-' + id).get(0).checked = true; event.preventDefault(); }); // Here is to handle display deletion // (checking in the hidden checkbox and hiding out the row). $('a.display-remove-link') .addClass('display-processed') .click(function() { var id = $(this).attr('id').replace('display-remove-link-', ''); $('#display-row-' + id).hide(); $('#display-removed-' + id).get(0).checked = true; return false; }); } }; /** * Helper function to parse a querystring. */ Drupal.Views.parseQueryString = function (query) { var args = {}; var pos = query.indexOf('?'); if (pos != -1) { query = query.substring(pos + 1); } var pairs = query.split('&'); for (var i in pairs) { if (typeof(pairs[i]) == 'string') { var pair = pairs[i].split('='); // Ignore the 'q' path argument, if present. if (pair[0] != 'q' && pair[1]) { args[decodeURIComponent(pair[0].replace(/\+/g, ' '))] = decodeURIComponent(pair[1].replace(/\+/g, ' ')); } } } return args; }; /** * Helper function to return a view's arguments based on a path. */ Drupal.Views.parseViewArgs = function (href, viewPath) { // Provide language prefix. if (Drupal.settings.pathPrefix) { var viewPath = Drupal.settings.pathPrefix + viewPath; } var returnObj = {}; var path = Drupal.Views.getPath(href); // Ensure there is a correct path. if (viewPath && path.substring(0, viewPath.length + 1) == viewPath + '/') { var args = decodeURIComponent(path.substring(viewPath.length + 1, path.length)); returnObj.view_args = args; returnObj.view_path = path; } return returnObj; }; /** * Strip off the protocol plus domain from an href. */ Drupal.Views.pathPortion = function (href) { // Remove e.g. http://example.com if present. var protocol = window.location.protocol; if (href.substring(0, protocol.length) == protocol) { // 2 is the length of the '//' that normally follows the protocol. href = href.substring(href.indexOf('/', protocol.length + 2)); } return href; }; /** * Return the Drupal path portion of an href. */ Drupal.Views.getPath = function (href) { href = Drupal.Views.pathPortion(href); href = href.substring(Drupal.settings.basePath.length, href.length); // 3 is the length of the '?q=' added to the URL without clean URLs. if (href.substring(0, 3) == '?q=') { href = href.substring(3, href.length); } var chars = ['#', '?', '&']; for (var i in chars) { if (href.indexOf(chars[i]) > -1) { href = href.substr(0, href.indexOf(chars[i])); } } return href; }; })(jQuery); ;/*})'"*/ ;/*})'"*/ (function ($) { /** * A progressbar object. Initialized with the given id. Must be inserted into * the DOM afterwards through progressBar.element. * * method is the function which will perform the HTTP request to get the * progress bar state. Either "GET" or "POST". * * e.g. pb = new progressBar('myProgressBar'); * some_element.appendChild(pb.element); */ Drupal.progressBar = function (id, updateCallback, method, errorCallback) { var pb = this; this.id = id; this.method = method || 'GET'; this.updateCallback = updateCallback; this.errorCallback = errorCallback; // The WAI-ARIA setting aria-live="polite" will announce changes after users // have completed their current activity and not interrupt the screen reader. this.element = $('
'); this.element.html('
' + '
' + '
' + '
' + '
' + '
 
'); }; /** * Set the percentage and status message for the progressbar. */ Drupal.progressBar.prototype.setProgress = function (percentage, message) { if (percentage >= 0 && percentage <= 100) { $('div.progress-bar', this.element).css('width', percentage + '%'); $('div.progress-bar', this.element).attr('aria-valuenow', percentage); $('div.percentage', this.element).html(percentage + '%'); } $('div.message', this.element).html(message); if (this.updateCallback) { this.updateCallback(percentage, message, this); } }; /** * Start monitoring progress via Ajax. */ Drupal.progressBar.prototype.startMonitoring = function (uri, delay) { this.delay = delay; this.uri = uri; this.sendPing(); }; /** * Stop monitoring progress via Ajax. */ Drupal.progressBar.prototype.stopMonitoring = function () { clearTimeout(this.timer); // This allows monitoring to be stopped from within the callback. this.uri = null; }; /** * Request progress data from server. */ Drupal.progressBar.prototype.sendPing = function () { if (this.timer) { clearTimeout(this.timer); } if (this.uri) { var pb = this; // When doing a post request, you need non-null data. Otherwise a // HTTP 411 or HTTP 406 (with Apache mod_security) error may result. $.ajax({ type: this.method, url: this.uri, data: '', dataType: 'json', success: function (progress) { // Display errors. if (progress.status == 0) { pb.displayError(progress.data); return; } // Update display. pb.setProgress(progress.percentage, progress.message); // Schedule next timer. pb.timer = setTimeout(function () { pb.sendPing(); }, pb.delay); }, error: function (xmlhttp) { pb.displayError(Drupal.ajaxError(xmlhttp, pb.uri)); } }); } }; /** * Display errors on the page. */ Drupal.progressBar.prototype.displayError = function (string) { var error = $('
×

Error message

').append(string); $(this.element).before(error).hide(); if (this.errorCallback) { this.errorCallback(this); } }; })(jQuery); ;/*})'"*/ ;/*})'"*/ /** * @file * Handles AJAX fetching of views, including filter submission and response. */ (function ($) { /** * Attaches the AJAX behavior to exposed filter forms and key views links. */ Drupal.behaviors.ViewsAjaxView = {}; Drupal.behaviors.ViewsAjaxView.attach = function() { if (Drupal.settings && Drupal.settings.views && Drupal.settings.views.ajaxViews) { $.each(Drupal.settings.views.ajaxViews, function(i, settings) { Drupal.views.instances[i] = new Drupal.views.ajaxView(settings); }); } }; Drupal.views = {}; Drupal.views.instances = {}; /** * JavaScript object for a certain view. */ Drupal.views.ajaxView = function(settings) { var selector = '.view-dom-id-' + settings.view_dom_id; this.$view = $(selector); // If view is not present return to prevent errors. if (!this.$view.length) { return; } // Retrieve the path to use for views' ajax. var ajax_path = Drupal.settings.views.ajax_path; // If there are multiple views this might've ended up showing up multiple // times. if (ajax_path.constructor.toString().indexOf("Array") != -1) { ajax_path = ajax_path[0]; } // Check if there are any GET parameters to send to views. var queryString = window.location.search || ''; if (queryString !== '') { // Remove the question mark and Drupal path component if any. var queryString = queryString.slice(1).replace(/q=[^&]+&?|&?render=[^&]+/, ''); if (queryString !== '') { // If there is a '?' in ajax_path, clean url are on and & should be // used to add parameters. queryString = ((/\?/.test(ajax_path)) ? '&' : '?') + queryString; } } this.element_settings = { url: ajax_path + queryString, submit: settings, setClick: true, event: 'click', selector: selector, progress: { type: 'throbber' } }; this.settings = settings; // Add the ajax to exposed forms. this.$exposed_form = $('#views-exposed-form-' + settings.view_name.replace(/_/g, '-') + '-' + settings.view_display_id.replace(/_/g, '-')); this.$exposed_form.once(jQuery.proxy(this.attachExposedFormAjax, this)); // Store Drupal.ajax objects here for all pager links. this.links = []; // Add the ajax to pagers. this.$view .once(jQuery.proxy(this.attachPagerAjax, this)); // Add a trigger to update this view specifically. In order to trigger a // refresh use the following code. // // @code // jQuery('.view-name').trigger('RefreshView'); // @endcode // Add a trigger to update this view specifically. var self_settings = this.element_settings; self_settings.event = 'RefreshView'; var self = this; this.$view.once('refresh', function () { self.refreshViewAjax = new Drupal.ajax(self.selector, self.$view, self_settings); }); }; Drupal.views.ajaxView.prototype.attachExposedFormAjax = function() { var button = $('input[type=submit], button[type=submit], input[type=image]', this.$exposed_form); button = button[0]; // Call the autocomplete submit before doing AJAX. $(button).click(function () { if (Drupal.autocompleteSubmit) { Drupal.autocompleteSubmit(); } }); this.exposedFormAjax = new Drupal.ajax($(button).attr('id'), button, this.element_settings); }; /** * Attach the ajax behavior to each link. */ Drupal.views.ajaxView.prototype.attachPagerAjax = function() { this.$view.find('ul.pager > li > a, ol.pager > li > a, th.views-field a, .attachment .views-summary a') .each(jQuery.proxy(this.attachPagerLinkAjax, this)); }; /** * Attach the ajax behavior to a single link. */ Drupal.views.ajaxView.prototype.attachPagerLinkAjax = function(id, link) { var $link = $(link); var viewData = {}; var href = $link.attr('href'); // Don't attach to pagers inside nested views. if ($link.closest('.view')[0] !== this.$view[0] && $link.closest('.view').parent().hasClass('attachment') === false) { return; } // Provide a default page if none has been set. This must be done // prior to merging with settings to avoid accidentally using the // page landed on instead of page 1. if (typeof(viewData.page) === 'undefined') { viewData.page = 0; } // Construct an object using the settings defaults and then overriding // with data specific to the link. $.extend( viewData, this.settings, Drupal.Views.parseQueryString(href), // Extract argument data from the URL. Drupal.Views.parseViewArgs(href, this.settings.view_base_path) ); // For anchor tags, these will go to the target of the anchor rather // than the usual location. $.extend(viewData, Drupal.Views.parseViewArgs(href, this.settings.view_base_path)); // Construct an object using the element settings defaults, // then overriding submit with viewData. var pager_settings = $.extend({}, this.element_settings); pager_settings.submit = viewData; this.pagerAjax = new Drupal.ajax(false, $link, pager_settings); this.links.push(this.pagerAjax); }; Drupal.ajax.prototype.commands.viewsScrollTop = function (ajax, response, status) { // Scroll to the top of the view. This will allow users // to browse newly loaded content after e.g. clicking a pager // link. var offset = $(response.selector).offset(); // We can't guarantee that the scrollable object should be // the body, as the view could be embedded in something // more complex such as a modal popup. Recurse up the DOM // and scroll the first element that has a non-zero top. var scrollTarget = response.selector; while ($(scrollTarget).scrollTop() == 0 && $(scrollTarget).parent()) { scrollTarget = $(scrollTarget).parent(); } // Only scroll upward. if (offset.top - 10 < $(scrollTarget).scrollTop()) { $(scrollTarget).animate({scrollTop: (offset.top - 10)}, 500); } }; })(jQuery); ;/*})'"*/ ;/*})'"*/ jQuery(document).ready(function($) { $(document).on("click", ".panel-group h4 a", function(event) { event.preventDefault(); parents = $(this).parent().parent().parent(); if (parents.find(".panel-collapse").hasClass('collapse')) { parents.parent().find('.panel-collapse').each(function(index, el) { $(this).addClass('collapse'); }); } parents.find(".panel-collapse").toggleClass("collapse"); }) }); ;/*})'"*/ ;/*})'"*/ jQuery(document).ready(function(b){var a=b.ajax({url:Drupal.settings.basePath+"php_device_info/init_device/"+b(window).width()+"/"+b(window).height(),});a.done(function(c){});a.fail(function(c,d){console.log(d);console.log(c)})}); ;/*})'"*/ ;/*})'"*/ jQuery(document).ready(function(b){accept=false;accept_matomo=true;b(document).on("click","#upvm_cookie_accept .display_more_cookies",function(e){b(this).toggleClass("open");if(b(this).hasClass("open")){d(b(this))}else{c(b(this))}});b(document).on("click","#matomo",function(e){if(b(this)[0].checked){accept_matomo=true}else{accept_matomo=false}});function d(e){e.html("Ne plus afficher toutes les utilisations prévues");b("#upvm_cookie_accept .details").addClass("open");b("#upvm_cookie_accept .accept").html("J'accepte");b("#matomo")[0].checked=false;accept_matomo=false}function c(e){e.html("Afficher toutes les utilisations prévues");b("#upvm_cookie_accept .details").removeClass("open");b("#upvm_cookie_accept .accept").html("J'accepte tout");b("#matomo")[0].checked=true;accept_matomo=true}window.onscroll=function(){if(window.scrollY>=window.innerHeight&&accept==false){accept=true;accept_matomo=true;upvm_cookie_accept(false)}};function a(){var h=h||[];h.push(["trackPageView"]);h.push(["enableLinkTracking"]);h.push(["setTrackerUrl",u+"piwik.php"]);h.push(["setSiteId",matomo_id]);var i=document,f=i.createElement("script"),e=i.getElementsByTagName("script")[0];f.type="text/javascript";f.async=true;f.defer=true;f.src=u+"piwik.js";e.parentNode.insertBefore(f,e)}upvm_cookie_accept=function(f){if(f){accept_matomo=false}var g=new Date();g.setTime(g.getTime()+(eu_cookie_compliance_cookie_lifetime*24*60*60*1000));var e="expires="+g.toUTCString();document.cookie="upvm_cookie_accept=true;"+e+";path=/";document.cookie="upvm_cookie_accept_matomo="+accept_matomo+";"+e+";path=/";b("#upvm_cookie_accept").addClass("close");if(accept_matomo){a()}b.get("/upvm_cookie/accept?list="+accept_matomo+"&message="+message_id)}}); ;/*})'"*/ ;/*})'"*/ (function(a){Drupal.behaviors.placeholders={attach:function(b,c){a("#edit-field-annee-publication-value-value-year > option:first").html(Drupal.t("Par année"));a("#edit-field-date-soutenance-value-value-year > option:first").html(Drupal.t("Par année"))}}})(jQuery); ;/*})'"*/ ;/*})'"*/ (function ($) { Drupal.behaviors.fontResize = { attach: function (context, settings) { /** Accesibilité A+ A-**/ var min = 16; var max = 20; var reset = $('.region-content').css('fontSize'); var elm = $('.region-content '); var size = str_replace(reset, 'px', ''); $('.plustext').click(function() { if (size < max) { size++; elm.css({ 'fontSize': size }); } return false; }); $('.minustext').click(function() { if (size >= min) { size--; elm.css({ 'fontSize': size }); } return false; }); function str_replace(haystack, needle, replacement) { var temp = haystack.split(needle); return temp.join(replacement); } } }; }(jQuery)); ;/*})'"*/ ;/*})'"*/