/* Global variables */
var Colors = {
'primary': {'r': 5, 'g': 69, 'b': 71},
'success': {'r': 0, 'g': 152, 'b': 119},
'red': {'r':250, 'g': 93, 'b': 93},
'emphasis': {'r': 130, 'g': 35, 'b': 95},
'gray': {'r': 220, 'g': 220, 'b': 220}
};
var autocomplete_timeout = null;
/* Moment locale */
if ($('html').attr('lang') == 'fr') {
moment.locale('fr');
}
/* On form modification */
$(document).on('change', 'form.main input, form.main select, form.main textarea', function()
{
if ($(this).hasClass('form-unrelated'))
return;
if (!$('form.main').hasClass('autosave'))
{
setBeforeUnload(function (e) {
var unsavedChanges = "You have unsaved changes. Do you want to leave this page and lose your changes?";
var e = e || window.event;
// For IE and Firefox
if (e) {
e.returnValue = unsavedChanges;
}
return unsavedChanges;
});
}
});
/* AJAX Form submission */
$(document).on('submit', 'form', function(event)
{
var method = $(this).attr('method');
if (!method || method.toLowerCase() != 'post') return;
event.preventDefault();
if ($('form.main').hasClass('autosave')) {
$('#autosave-status .autosave-saving').removeClass('ishidden');
$('#autosave-status .autosave-utd').addClass('ishidden');
$('.disable-on-autosave').addClass('button-disabled');
}
else $('#loading').removeClass('ishidden');
$.message.clean();
var $this = $(this);
$.post($(this).attr('action'), $(this).serialize(), function(data, textStatus, jq)
{
$('#loading').addClass('ishidden');
$('#autosave-status .autosave-saving').addClass('ishidden');
$('#autosave-status .autosave-utd').removeClass('ishidden');
$('.disable-on-autosave').removeClass('button-disabled');
if (data.success)
{
setBeforeUnload(null);
$this.find('input[name="cancel"]').val($this.find('input[name="cancel"]').data('back'));
$this.trigger('submitted', data.data, data.action);
if (typeof data.notification !== 'undefined')
$(document).trigger('pushnotification', data.notification);
if (data.message !== null)
{
if (data.warning) $.message.show(data.message, 'warning');
else $.message.show(data.message, 'success');
}
}
else if (data.message && data.message != '')
{
$.message.show(data.message, 'error');
$this.trigger('failed', data.data);
if (data.data && data.data.errors && typeof data.data.errors !== 'undefined')
{
$.message.inline($this, data.data.errors, 'error');
}
}
});
});
/* AJAX file uploader */
$(document).on('change', 'input[type="file"]', function(event)
{
$(this).upload().val('');
});
/* Close overlay */
$(document).on('click', '.overlay', function(event)
{
$(this).removeClass('show');
$('.' + $(this).attr('rel')).removeClass('open');
$('body').removeClass('lockscroll');
});
/* Open header list */
$(document).on('click', 'header [data-list]', function(event)
{
event.preventDefault();
event.stopPropagation();
if (!$(this).hasClass('active'))
{
$('.header-list[rel="' + $('header [data-list].active').attr('id') + '"].open').removeClass('open');
$('header [data-list].active').removeClass('active');
}
$(this).toggleClass('active');
$('.header-list[rel="' + $(this).attr('id') + '"]').toggleClass('open');
});
/* Stop header list event propagation*/
$(document).on('click', '.header-list.open', function(event)
{
event.stopPropagation();
});
/* Close header list */
$(document).on('click', function(event)
{
$('#' + $('.header-list.open').attr('rel')).removeClass('active');
$('.header-list.open').removeClass('open');
});
/* Click on custom checkbox */
$(document).on('click', '.input-checkbox, .input-radio', function(event)
{
if ($(this).closest('label').size() == 0)
$(this).prev().click();
});
/* Remove default value from select on change */
$(document).on('change', 'select', function(event)
{
$(this).children('[data-default]').remove();
});
/* Lock scrolling in parent */
$(document).on('DOMMouseScroll mousewheel', '.lockscroll', function(event)
{
if (!$(event.target).hasClass('lockscroll'))
return;
var isDown = false;
if( event.originalEvent.detail > 0 || event.originalEvent.wheelDelta < 0 )
isDown = true;
if (!isDown && $(this).scrollTop() <= 0
|| (isDown && $(this).scrollTop() >= $(this).prop('scrollHeight') - $(this).innerHeight()))
event.preventDefault();
});
/* Filters */
$(document).on('change', '.filters .filter', function()
{
if ($(this).data('custom') === undefined)
location = location.pathname + '?' + $('.filters .filter:not([data-custom])').serialize();
});
$(document).on('change', '.filters .filter[name="o-dropdown"]', function()
{
if ($(this).val() == -1)
$(this).val('');
$('.filter[name="o"]').val($(this).val()).change();
});
/* Search behavior */
$(document).on('keyup', '.search-wrapper input[type="text"]', function(event)
{
$(this).next().toggleClass('canclear', $(this).val() != '');
});
$(document).on('click', '.search-clear', function(event)
{
$(this).parent().prev().val('').keyup().focus();
if ($(this).closest('.search-wrapper').hasClass('needrefresh'))
$(this).closest('.search-wrapper').find('.filter').change();
});
$(document).on('click', '.search-icon-default', function(event)
{
$(this).parent().prev().focus();
});
/* Autocomplete Behavior */
$.fn.foxcomplete = function()
{
return this.each(function()
{
$(this)
.attr('type', 'hidden')
.addClass('foxcomplete-value')
.wrap('
');
$result.text(result.name);
$result.addClass("foxcomplete-result");
$result.data("value", result.id);
if (result.id == myvalue)
{
$result.addClass("selected");
}
$results.append($result);
});
}
else
$results.html('
' + data.message + '
');
});
}, 200, $(this));
});
$(document).on('mousedown', '.foxcomplete-result', function(event)
{
var $wrapper = $(this).closest('.foxcomplete-wrapper');
$wrapper.children('.foxcomplete-input').data('text', $(this).text());
$wrapper.children('.foxcomplete-value').val($(this).data('value')).trigger('change', {'text':$(this).text()});
$wrapper.find('.foxcomplete-result.selected').removeClass('selected');
$(this).addClass('selected');
});
$(document).on('foxcomplete:settext', '.foxcomplete-value', function(event, data)
{
$(this).closest('.foxcomplete-wrapper').children('.foxcomplete-input').val(data);
});
$(document).on('foxcomplete:reset', '.foxcomplete-input', function(event, data)
{
$(this).addClass('foxcomplete-init').removeData('search-rendered');
$(this).closest('.foxcomplete-wrapper').children('.foxcomplete-results').html('');
});
/* Menu Button Actions */
$(document).on('click', '.classic-button.rightside', function(event)
{
if ($(this).hasClass('defaultbehavior'))
return;
event.preventDefault();
event.stopPropagation();
if (!$('.button-menu.selected').is($(this).parent().children('.button-menu')))
$('.button-menu').removeClass('selected');
$(this).parent().children('.button-menu').toggleClass('selected');
});
$(document).on('click', function()
{
$('.button-menu').removeClass('selected');
});
/* Disabled buttons behavior */
$(document).on('click', 'a.button-disabled', function(event)
{
event.preventDefault();
});
/* Input Icon Click Event */
$(document).on('click', '.input-icon', function(event)
{
var newevent;
newevent = document.createEvent('MouseEvents');
newevent.initMouseEvent('mousedown', true, true, window);
$(this).prev()[0].dispatchEvent(newevent);
});
$(document).on('click', '.supportlink', function()
{
$('#getsupport').click();
});
/* Daterange Icon Click Event */
$(document).on('click', '.daterange-wrapper .input-icon', function()
{
$(this).prev().focus();
});
/* Number input fix */
$(document).on('change', '[type="number"]', function()
{
if (parseInt($(this).val()) > parseInt($(this).attr('max')))
$(this).val($(this).attr('max'));
if (parseInt($(this).val()) < parseInt($(this).attr('min')))
$(this).val($(this).attr('min'));
});
$(document).on('daterange.init', function(event)
{
var options = {
past: {
ranges: {
'Today': [moment(), moment()],
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
}
},
future: {
ranges: {
'Today': [moment(), moment()],
'Tomorrow': [moment(), moment().add(1, 'days')],
'Next 7 Days': [moment(), moment().add(6, 'days')],
'Next 30 Days': [moment(), moment().add(29, 'days')],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Next Month': [moment().add(1, 'month').startOf('month'), moment().add(1, 'month').endOf('month')]
}
}
};
if ($('html').attr('lang') == 'fr')
{
options.past.locale = daterangepicker_locales.fr;
options.future.locale = daterangepicker_locales.fr;
var newranges = {};
Object.keys(options.past.ranges).forEach(function(range_name)
{
newranges[daterangepicker_locales.fr_ranges[range_name]] = options.past.ranges[range_name];
});
options.past.ranges = newranges;
newranges = {};
Object.keys(options.future.ranges).forEach(function(range_name)
{
newranges[daterangepicker_locales.fr_future_ranges[range_name]] = options.future.ranges[range_name];
});
options.future.ranges = newranges;
}
else
{
options.past.locale = {};
options.future.locale = {};
}
var dateranges = $('input[type="daterange"]');
dateranges
.attr('type', 'text')
.addClass('daterange')
.wrap('
')
.after('
')
.attr('readonly','');
dateranges.each(function (i, daterange) {
var daterangeOptions = {
opens: 'left'
};
if ($(daterange).is(':not([data-daterange-future])')) {
daterangeOptions.ranges = options.past.ranges;
daterangeOptions.locale = options.past.locale;
} else {
daterangeOptions.ranges = options.future.ranges;
daterangeOptions.locale = options.future.locale;
}
if ($(daterange).is('[data-daterange-time]')) {
daterangeOptions.timePicker = true;
daterangeOptions.locale.format = "MM/DD/YYYY hh:mm A";
}
if ($(daterange).is('[data-daterange-datelimit]')) {
if ($(daterange).data('daterange-datelimit') >= 0) {
daterangeOptions.dateLimit = {
days: $(daterange).data('daterange-datelimit')
};
}
} else {
daterangeOptions.dateLimit = {
days: 90
};
}
if ($(daterange).is('[data-daterange-parent]')) {
daterangeOptions.parentEl = $(daterange).data('daterange-parent');
}
var daterangeInstance = $(daterange).daterangepicker(daterangeOptions);
// https://github.com/dangrossman/daterangepicker/issues/1053
daterangeInstance.on('showCalendar.daterangepicker', function(event, picker) {
// daterangeInstance !== picker
if (picker.element.offset().top - $(window).scrollTop() + picker.container.outerHeight() > $(window).height()) {
picker.drops = "up";
} else {
picker.drops = "down";
}
});
});
});
$.fn.toggler = function(options)
{
var settings = $.extend({
extra_classes: '',
locale : {
'on' : 'On',
'off' : 'Off'
}
}, options);
settings.locale.on = $(this).data("toggle-on") || settings.locale.on;
settings.locale.off = $(this).data("toggle-off") || settings.locale.off;
if (settings.locale.off.length > 4
|| settings.locale.on.length > 4)
{
settings.extra_classes = ' toggle-minimal';
}
return this.each(function() {
$(this)
.wrap('
')
.after('');
});
};
/* Init custom components */
$(document).ready(function()
{
$(document).trigger('daterange.init');
$('select[multiple]:not(.legacy)').chosen({ width: '100%' });
$(':checkbox:not(.legacy,.toggle)').hide().after('
');
$(':radio:not(.legacy)').hide().after('
');
$('[type="date"]').toDatePicker().css('cursor', 'pointer');
$('[type="time"]').toTimePicker().css('cursor', 'pointer');
$('[type="autocomplete"]').foxcomplete();
$('.card select:not([multiple]), .filters select:not([multiple])').wrap('
').after('
')
$('.search-wrapper input').keyup();
// Init search input
$('.search-wrapper').each(function()
{
if ($(this).children('input[type="text"]').val() != '')
$(this).addClass('needrefresh');
});
// Init filters
$('select[data-value]').each(function(index)
{
if ($(this).data('value') != '')
$(this).val($(this).data('value'));
});
// Init toggler locale
if ($('html').attr('lang') == 'fr')
$(':checkbox.toggle').toggler({locale:{on:'Actif',off:'Inactif'}});
else
$(':checkbox.toggle').toggler();
// Init Form auto-save
if ($('form.main').size() > 0)
{
if ($('form.main').hasClass('autosave'))
$('#autosave-status').removeClass('ishidden');
}
// Init sorting
if ($('.filter[name="o"]').size() > 0)
{
var sortdirection = (($('.filter[name="o"]').val().substr(0,1) == '-') ? 'DESC' : 'ASC');
var sortname = $('.filter[name="o"]').val().replace(/^-/, '');
if ($('[data-sort="' + sortname + '"]').size() > 0)
{
$('[data-sort="' + sortname + '"]').addClass('primary');
switch (sortdirection)
{
case 'ASC' :
$('[data-sort="' + sortname + '"]').html(
$('[data-sort="' + sortname + '"]').text() +
'
'
);
break;
case 'DESC' :
$('[data-sort="' + sortname + '"]').html(
$('[data-sort="' + sortname + '"]').text() +
'
'
);
break;
}
}
}
$('[data-arrow]').each(function(index, value) {
$(value).children('.top-arrow').css('left', $($(value).attr('data-arrow')).offset().left + ($($(value).attr('data-arrow')).width()/2) - $(value).offset().left + "px");
});
// Init loading screen
$('body').append('
');
// Init progress bar
$('.progress').each(function()
{
$(this)
.append('
')
.append('
');
var current = parseInt($(this).data('current'));
var max = parseInt($(this).data('max'));
var ratio = Math.round((current / max) * 100);
var text = current + '/' + max;
if (ratio < 0)
ratio = 0;
if (ratio > 100)
ratio = 100;
if ($(this).data('ratio') !== undefined)
text = ratio + '%';
if (ratio < 50)
$(this).children('.progress-content').text(text);
else
$(this).children('.progress-bar').text(text);
$(this).children('.progress-bar').css('right', (100 - ratio) + '%');
$(this).children('.progress-content').css('left', ratio + '%');
});
// Clean multi-actions buttons if only one action is specified
$('.button-menu').each(function() {
if ($(this).children().length == 0)
{
$(this).prev().prev().removeClass('leftside');
$(this).prev().remove();
$(this).remove();
}
});
// Global events
hookGlobalEvents();
});
function urlInputChanged()
{
// On URL input change (check for protocol omission)
var val = $(this).val();
if (val != "" && !val.match(/^[a-zA-Z]+:\/\//))
{
val = 'http://' + val;
$(this).val(val);
}
}
function hookGlobalEvents()
{
// URL inputs
$('input[type=url]').unbind("change", urlInputChanged).bind("change", urlInputChanged);
}
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-M4KL57');
function walkme_get_language()
{
return $('html').attr('lang');
}