/(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 = $('').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);
;/*})'"*/
;/*})'"*/
/**
* Attaches the calendar behavior to all required fields
*/
(function($) {
function makeFocusHandler(e) {
if (!$(this).hasClass('date-popup-init')) {
var datePopup = e.data;
// Explicitely filter the methods we accept.
switch (datePopup.func) {
case 'datepicker':
$(this)
.datepicker(datePopup.settings)
.addClass('date-popup-init');
$(this).click(function(){
$(this).focus();
});
break;
case 'timeEntry':
$(this)
.timeEntry(datePopup.settings)
.addClass('date-popup-init');
$(this).click(function(){
$(this).focus();
});
break;
case 'timepicker':
// Translate the PHP date format into the style the timepicker uses.
datePopup.settings.timeFormat = datePopup.settings.timeFormat
// 12-hour, leading zero,
.replace('h', 'hh')
// 12-hour, no leading zero.
.replace('g', 'h')
// 24-hour, leading zero.
.replace('H', 'HH')
// 24-hour, no leading zero.
.replace('G', 'H')
// AM/PM.
.replace('A', 'p')
// Minutes with leading zero.
.replace('i', 'mm')
// Seconds with leading zero.
.replace('s', 'ss');
datePopup.settings.startTime = new Date(datePopup.settings.startTime);
$(this)
.timepicker(datePopup.settings)
.addClass('date-popup-init');
$(this).click(function(){
$(this).focus();
});
break;
}
}
}
Drupal.behaviors.date_popup = {
attach: function (context) {
for (var id in Drupal.settings.datePopup) {
$('#'+ id).bind('focus', Drupal.settings.datePopup[id], makeFocusHandler);
}
}
};
})(jQuery);
;/*})'"*/
;/*})'"*/
/**
* @file
* set agenda dates fields placeholders.
*/
(function($) {
Drupal.behaviors.placeholders = {
attach: function (context, settings) {
if ( $("input[name*=field_event_date_value\\[min\\]]").length && $("input[name*=field_event_date_value\\[max\\]]").length ) {
$("input[name*=field_event_date_value\\[min\\]]").attr('placeholder', Drupal.t('Du'));
$("input[name*=field_event_date_value\\[max\\]]").attr('placeholder', Drupal.t('Au'));
}
}
};
})(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));
;/*})'"*/
;/*})'"*/