altinn-designsystem
Version:
Altinn Design system based on Pattern Lab.
1,512 lines (1,346 loc) • 59.6 kB
JavaScript
var cardsToggle = function() {
$('.a-box-button').on('click', function() {
$(this).blur(); // remove blue background on expanded cards
});
};
var onFileInputChange = function() {
$('.a-js-fileInputChangeHandler').on('focus', function() {
$('.a-js-fileInputChangeHandler').closest('label').addClass('a-custom-fileupload--focused');
});
$('.a-js-fileInputChangeHandler').on('blur', function() {
$('.a-js-fileInputChangeHandler').closest('label').removeClass('a-custom-fileupload--focused');
});
};
var onFileListDeleteClick = function(src) {
var $fileListContainer = $(src).closest('.a-js-fileListContainer');
$fileListContainer.prev().find('input').val('');
$fileListContainer.hide();
$fileListContainer.prev().show(); // show file upload btn
};
/* globals $ */
var formatOrgNr = function() {
$('.a-js-orgNr').on('keyup', function() {
var number;
this.value = this.value.replace(/ /g, '');
number = this.value;
this.value = number.replace(/(.{3})/g, '$1 ').trim();
});
};
/* globals goBack */
var onConfirmDeletionClick = function() {
var $list = $('ul[data-list-selectable="true"]');
var $segmentDone = $('.segment-done');
var goToReceipt = false;
if ($list.find('li.a-selected:not(.a-list-header)').length === $list.find('li:not(.a-list-header)').length) {
goToReceipt = true;
} else {
$list.find('li.a-selected')
.addClass('a-deleted')
.addClass('a-disabled')
.removeClass('a-selected')
.removeAttr('tabindex');
$segmentDone.hide();
}
return goToReceipt;
};
var handleModalClose = function(src, targetUrl) {
var hasSelectedRows = $('ul[data-list-selectable="true"] li.a-selected:not(.a-list-header)').length > 0;
if (!hasSelectedRows) {
$(src).popover('disable');
location.href = targetUrl;
}
};
var setupListRowSelect = function() {
var $list = $('ul[data-list-selectable="true"]');
var $segmentDone = $('.segment-done');
$list.on('click', 'li.a-selectable:not(.a-list-header)', function() {
if (!$(this).hasClass('a-deleted')) {
$(this).toggleClass('a-selected');
if ($list.find('li.a-selected').length > 0) {
$segmentDone.show();
} else {
$segmentDone.hide();
}
}
});
$('.a-js-add-remove-all').on('click', function() {
if ($list.find('li.a-selected:not(.a-list-header)').length === $list.find('li:not(.a-list-header)').length) {
$list.find('li:not(.a-list-header)').removeClass('a-selected');
$segmentDone.hide();
} else {
$list.find('li:not(.a-list-header)').addClass('a-selected');
$segmentDone.show();
}
});
$('.a-js-cancel-deletion').on('click', function() {
$list.find('li:not(.a-list-header)').removeClass('a-selected');
$segmentDone.hide();
});
};
var removeListRow = function(src) {
if (src) {
$(src).remove();
}
};
// Toggles between two components.
// Each toggable component needs to be referenced by id from data-switch-target attribute of switch
var toggleSwitch = function() {
var $allWithTarget = $('.switch-container input[data-switch-target]');
var allTargets = [];
$.each($allWithTarget, function() {
$.each($(this).data('switch-target'), function() {
allTargets.push(this + '');
});
});
$allWithTarget.on('click', function() {
var $currentSwitch = $(this);
var switchTargets = $currentSwitch.data('switch-target');
$.each(switchTargets, function() {
$('#' + this).show();
});
$.each(allTargets, function() {
var hide = true;
var outerTarget = this + '';
$.each(switchTargets, function() {
var innerTarget = this + '';
if (outerTarget === innerTarget) {
hide = false;
}
});
if (hide) {
$('#' + this).hide();
}
});
});
};
var truncateToNumberOfLines = function(element) {
var originalText = $(element).find('.sr-only').text();
var $innerText = $(element).find('.a-js-inner-text');
var containerHeight = $(element).height();
var containerWidth = $(element).width();
var i;
for (i = 0; i < 500; i++) {
if ($innerText.outerHeight() >= (containerHeight + 5) ||
$innerText.outerWidth() >= (containerWidth)) {
$innerText.text($innerText.text().trim().replace(/\s*.{4}$/, '...'));
} else {
break;
}
}
};
var truncateAllBoxButtons = function() {
$('.a-box-button-name').filter(':visible').each(function() {
truncateToNumberOfLines($(this));
});
if ($('.a-box-button-name').length > 0) {
$(window).off('resize', truncateAllBoxButtons);
$(window).resize(truncateAllBoxButtons);
}
};
var truncateBoxButtonNames = function() {
truncateAllBoxButtons();
$('.a-collapsePanel-body').on('shown.bs.collapse', function() {
truncateAllBoxButtons();
});
$(document).on('click', '.a-box-button', function(e) {
truncateAllBoxButtons();
});
};
var addListExpandHandler = function() {
$('body').on('click', '.a-list *[data-toggle="collapse"]', function() {
// This script runs before the bootstrap collapse handler, so the collapsed-class will still be
// present even though the content is about to be expanded
if ($(this).hasClass('collapsed')) {
$(this).closest('li').addClass('a-expanded');
$(this).closest('li').siblings().removeClass('a-expanded');
} else {
$(this).closest('li').removeClass('a-expanded');
}
});
};
/* globals $ */
var feedbackToggle = function() {
if ($('.a-js-feedbackToggle').length > 0) {
$('.a-js-feedbackToggle').closest('fieldset').next().hide();
$('.a-js-feedbackToggle').closest('fieldset').next().next()
.hide();
$('.a-js-feedbackToggle').closest('fieldset').next().next()
.next()
.hide();
$('.a-js-feedbackToggle').each(function() {
$(this).find('input[type=radio]').change(function() {
if ($(this).val() === 'radio1' && $(this).is(':checked')) {
$(this).closest('fieldset').next().show();
$(this).closest('fieldset').next().next()
.hide();
$(this).closest('fieldset').next().next()
.next()
.hide();
} else if ($(this).val() === 'radio2' && $(this).is(':checked')) {
$(this).closest('fieldset').next().hide();
$(this).closest('fieldset').next().next()
.show();
$(this).closest('fieldset').next().next()
.next()
.show();
}
});
$(this).closest('form').find('button').on('click', function() {
$(this).closest('fieldset').next().show();
$(this).closest('fieldset').next().next()
.hide();
$(this).closest('fieldset').next().next()
.next()
.hide();
}.bind(this));
});
}
};
var setupSelectableCheckbox = function() {
$('body').on('change', '.a-js-selectable-checkbox', function() {
if ($(this).is(':checked')) {
$(this).closest('.a-selectable').addClass('a-selected');
} else {
$(this).closest('.a-selectable').removeClass('a-selected');
}
});
$('body').on('focus', '.a-js-selectable-checkbox', function() {
$(this).closest('.a-selectable').addClass('a-focus');
});
$('body').on('blur', '.a-js-selectable-checkbox', function() {
$(this).closest('.a-selectable').removeClass('a-focus');
});
};
/* eslint vars-on-top: 0 */
/* globals AltinnDropdown */
/* globals AltinnDropdown:true */
AltinnDropdown = {
init: function() {
var that = this;
$('body').on('click', '[data-toggle="altinn-dropdown"] .a-dropdown-item', function() {
var $dropdownElement = $(this).closest('[data-toggle="altinn-dropdown"]');
if ($(this).data('value')) {
$dropdownElement.find('.a-js-altinnDropdown-value').val($(this).data('value'));
}
$dropdownElement.find('.a-dropdown-toggle').html($(this).html());
// Focus the dropdownmenu element after click on item in dropdownmenu
var id = $(this).closest('.a-dropdown-menu').attr('aria-labelledby');
$('#' + id).focus();
});
}
};
/* globals $ */
var handleFocus = function() {
// If state on input is 'focus', add class to a-input: 'a-input-focus'
$('body').on('focus', 'input.form-control', function() {
$(this).parent().addClass('a-input-focus');
});
$('body').on('blur', 'input.form-control', function() {
$(this).parent().removeClass('a-input-focus');
});
$('.a-radioButtons-stackedList').find('input[type=radio]').change(function() {
var me = $(this);
if (me.is(':checked')) {
me.parent().addClass('a-js-radioParentGray');
$('input[type=radio]').each(function() {
if ($(this).attr('id') !== me.attr('id') &&
$(this).attr('name') === me.attr('name')) {
$(this).parent().removeClass('a-js-radioParentGray');
}
});
}
});
};
var setupTruncateLines = function() {
setTimeout(function() {
// Max two lines for all screen sizes
$('.a-js-truncate-2').truncate({
lines: 2
});
// Max two lines for screen sizes less than 768
// Intit with 3 lines instead of 2 for IE11
if (!!window.MSInputMethodContext
&& !!document.documentMode
&& window.innerWidth < 768) {
$('.a-js-truncate-2-sm-down').truncate({
lines: 3
});
} else {
$('.a-js-truncate-2-sm-down').truncate({
lines: 2
});
}
}, 1);
$(window).resize(function() {
// Max two lines for all screen sizes
$('.a-js-truncate-2').truncate('collapse');
$('.a-js-truncate-2').truncate('update');
// Max two lines for screen sizes less than 768
if (window.innerWidth < 768) {
$('.a-js-truncate-2-sm-down').truncate('collapse');
$('.a-js-truncate-2-sm-down').truncate('update');
} else {
$('.a-js-truncate-2-sm-down').truncate('expand');
}
});
$('.a-collapsePanel-body').on('shown.bs.collapse', function() {
var el = $(this).siblings('.a-collapsePanel-heading').find('.a-js-truncate-2-sm-down');
if (window.innerWidth < 768) {
el.truncate('expand');
}
});
$('.a-collapsePanel-body').on('hide.bs.collapse', function() {
var el = $(this).siblings('.a-collapsePanel-heading').find('.a-js-truncate-2-sm-down');
if (window.innerWidth < 768) {
el.truncate('collapse');
}
});
};
/* globals AltinnLoader:true */
AltinnLoader = {
addLoader: function($target) {
if ($target.find('.loader-container').length === 0) {
$target.prepend('<div class="loader-container"><div class="loader loader-ellipsis"></div></div>');
}
$('button.a-modal-back').attr('disabled', true);
$('button.a-modal-close').attr('disabled', true);
},
removeLoader: function($target) {
$target.find('.loader-container').remove();
$('button.a-modal-back').attr('disabled', false);
$('button.a-modal-close').attr('disabled', false);
}
};
/* globals jQuery */
/* eslint dot-notation: "warn" */
(function($) {
$.fn.datepicker.dates['nn'] = {
days: ['sundag', 'måndag', 'tysdag', 'onsdag', 'torsdag', 'fredag', 'laurdag'],
daysShort: ['sun', 'mån', 'tys', 'ons', 'tor', 'fre', 'lau'],
daysMin: ['su', 'må', 'ty', 'on', 'to', 'fr', 'la'],
months: ['januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember'],
monthsShort: ['jan', 'feb', 'mar', 'apr', 'mai', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'des'],
today: 'i dag',
monthsTitle: 'Månadar',
clear: 'Nullstill',
weekStart: 1,
format: 'dd.mm.yyyy'
};
}(jQuery));
/* globals jQuery */
/* eslint dot-notation: "warn" */
(function($) {
$.fn.datepicker.dates['no'] = {
days: ['søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag'],
daysShort: ['søn', 'man', 'tir', 'ons', 'tor', 'fre', 'lør'],
daysMin: ['sø', 'ma', 'ti', 'on', 'to', 'fr', 'lø'],
months: ['januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember'],
monthsShort: ['jan', 'feb', 'mar', 'apr', 'mai', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'des'],
today: 'i dag',
monthsTitle: 'Måneder',
clear: 'Nullstill',
weekStart: 1,
format: 'dd.mm.yyyy'
};
}(jQuery));
/* globals $ */
var initializeDatepicker = function() {
var today = ('0' + new Date().getDate()).slice(-2) + '.' + ('0' + (new Date().getMonth() + 1)).slice(-2) + '.' + new Date().getFullYear();
var returnUserLanguageNumericCodeFromCookie = function(cookies, cname) {
var name = cname + '=';
var decodedCookies = decodeURIComponent(cookies);
var splitCookies = decodedCookies.split(';');
var i;
var c;
for (i = 0; i < splitCookies.length; i++) {
c = splitCookies[i];
if (c.charAt(0) === ' ') {
c = c.substring(1);
}
if (c.indexOf(name) === 0 && c.indexOf('UL') > 0) {
return c.substring(c.indexOf('UL') + 3);
}
}
return null;
};
var returnLanguageCodeFromNumericCode = function(numeric) {
var lang;
switch (numeric) {
// bokmål
case '1044':
return 'no';
// engelsk
case '1033':
return 'en';
// nynorsk
case '2068':
return 'nn';
default:
return 'no';
}
};
var ulNumeric = returnUserLanguageNumericCodeFromCookie(document.cookie, 'altinnPersistentContext');
var userLanguage = returnLanguageCodeFromNumericCode(ulNumeric);
if ($('.a-overlay-container').length > 0) {
$('.a-overlay-container').attr('id', 'picker-container');
} else {
$('body').attr('id', 'picker-container');
}
$('.form-control.date').each(function() {
$(this).val($(this).val() || today);
});
$('.form-control.date').datepicker({
format: 'dd.mm.yyyy',
language: userLanguage,
todayHighlight: true,
orientation: 'bottom left',
autoclose: true,
maxViewMode: 0,
container: '#picker-container',
templates: {
leftArrow: '<i class="ai ai-back"></i>',
rightArrow: '<i class="ai ai-arrowright"></i>'
}
}).on('show', function(e) {
$('.datepicker').find('table').attr('cellpadding', '0');
$('.datepicker').find('table').attr('cellspacing', '0');
});
if ($('.form-control.date').length > 0) {
$('body').on('click', function(e) {
$('.datepicker').hide();
});
$('.form-control.date').on('click', function(e) {
e.stopPropagation(); e.preventDefault();
});
$('.datepicker').on('click', function(e) {
e.stopPropagation(); e.preventDefault();
});
}
};
function showPassword(src, target) {
var pwd = $('#' + target);
if (pwd.attr('type') === 'text') {
pwd.attr('type', 'password');
$(src).children('.hide-password-text').hide();
$(src).children('.show-password-text').show();
} else {
pwd.attr('type', 'text');
$(src).children('.hide-password-text').show();
$(src).children('.show-password-text').hide();
setTimeout(function() {
pwd.attr('type', 'password');
$(src).children('.hide-password-text').hide();
$(src).children('.show-password-text').show();
}, 15000);
}
}
function setVisibility(passwordField, showPasswordId) {
var password = $(passwordField);
if (password.val().length > 0) {
$('#' + showPasswordId).removeClass('d-none');
} else {
$('#' + showPasswordId).addClass('d-none');
}
}
/* globals currentRequest, popoverLocalInit, AltinnModal */
/* globals AltinnModal:true, AltinnLoader */
AltinnModal = {
closeModal: function(settings) {
$('body').removeClass('a-modal-background-error a-displayNav');
$('body').removeClass('a-modal-background-success');
$(settings.target).modal('hide');
$('body').append($('.a-stickyHelp-container'));
},
loadModal: function(settings) {
var currentRequest = $.ajax({
url: settings.url,
beforeSend: function() {
if (typeof currentRequest !== 'undefined') {
currentRequest.abort();
}
AltinnLoader.addLoader($('body'));
},
data: settings.data
}).always(function() {
}).done(function(data) {
var modalPage = $('<div/>', {
class: 'modalPage',
html: data
});
var page = $('<div/>', {
class: 'a-page a-current-page',
data: {
pageIndex: 1,
isSuccess: settings.isSuccess,
isError: settings.isError,
showModalNav: settings.showModalNav
},
html: modalPage
});
$('body').removeClass('a-modal-background-error a-displayNav');
$('body').removeClass('a-modal-background-success');
// if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {
// goToModalHeader();
// }
$(settings.target + ' .a-modal-content-target').append(page);
$(settings.target).find('.a-current-page').first().data().enableDirtyPopover = settings.enableDirtyPopover;
// Initialize with backdrop: static to prevent modal from closing when clicking outside,
// and keyboard: false to prevent ESC from closing the modal
$(settings.target).modal({
backdrop: 'static',
keyboard: false
});
$(settings.target).on('hidden.bs.modal', function() {
$(settings.target + ' .a-modal-content-target').empty();
$(settings.target).attr('aria-hidden', true);
$('#altinnModal').siblings('.row').removeClass('d-none');
});
$(settings.target).on('shown.bs.modal', function() {
$(settings.target).removeAttr('aria-hidden');
$('#altinnModal').siblings('.row').addClass('d-none');
});
popoverLocalInit();
if (settings.isError) {
$('body').addClass('a-modal-background-error');
if (settings.showModalNav) {
$('body').addClass('a-displayNav');
}
} else if (settings.isSuccess) {
$('body').addClass('a-modal-background-success');
}
AltinnLoader.removeLoader($('body'));
// causes issues in IE11 (blinking quickhelp when modal is open)
// $(settings.target).on('transitionend', function() {
// $(settings.target).append($('.a-stickyHelp-container'));
// });
});
},
nextModalPageWithContent: function(settings) {
var current;
var modalPage = $('<div/>', {
class: 'modalPage',
html: settings.content
});
var existingPages;
var newPage;
var newPageIndex;
existingPages = $(settings.target + ' :data(page-index)');
if (settings.clearHistory) {
newPageIndex = 1;
} else {
newPageIndex = existingPages.length + 1;
}
if (settings.clearHistory) {
$(settings.target + ' :data(page-index)').not('.a-current-page').remove();
}
newPage = $('<div/>', {
class: 'a-page a-next-page',
data: {
pageIndex: newPageIndex,
isSuccess: settings.isSuccess,
isError: settings.isError,
showModalNav: settings.showModalNav
},
html: modalPage
});
// if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {
// goToModalHeader();
// }
$(settings.target + ' .a-modal-content-target').append(newPage);
$(settings.target).animate({
scrollTop: 0
}, 20);
current = $(settings.target + ' .a-current-page');
setTimeout(function() {
$('body').removeClass('a-modal-background-error a-displayNav');
$('body').removeClass('a-modal-background-success');
current.removeClass('a-current-page').addClass('a-previous-page');
newPage.removeClass('a-next-page').addClass('a-current-page');
$(newPage).data().enableDirtyPopover = settings.enableDirtyPopover;
if (settings.isError) {
$('body').addClass('a-modal-background-error');
if (settings.showModalNav) {
$('body').addClass('a-displayNav');
}
} else if (settings.isSuccess) {
$('body').addClass('a-modal-background-success');
}
}, 0);
current.on('transitionend', function() {
if (settings.clearHistory) {
$(settings.target + ' :data(page-index)').not('.a-current-page').remove();
} else {
current.hide().off();
}
});
popoverLocalInit();
},
nextModalPage: function(settings) {
var currentRequest = $.ajax({
url: settings.url,
beforeSend: function() {
if (typeof currentRequest !== 'undefined') {
currentRequest.abort();
}
AltinnLoader.addLoader($(settings.target).find('.a-current-page .a-modal-body'));
},
data: settings.data
}).always(function() {
}).done(function(data) {
var current;
var modalPage = $('<div/>', {
class: 'modalPage',
html: data
});
var existingPages;
var newPage;
var newPageIndex;
existingPages = $(settings.target + ' :data(page-index)');
if (settings.clearHistory) {
newPageIndex = 1;
} else {
newPageIndex = existingPages.length + 1;
}
if (settings.clearHistory) {
$(settings.target + ' :data(page-index)').not('.a-current-page').remove();
}
newPage = $('<div/>', {
class: 'a-page a-next-page',
data: {
pageIndex: newPageIndex,
isSuccess: settings.isSuccess,
isError: settings.isError,
showModalNav: settings.showModalNav
},
html: modalPage
});
// if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {
// goToModalHeader();
// }
$(settings.target + ' .a-modal-content-target').append(newPage);
$(settings.target).animate({
scrollTop: 0
}, 20);
current = $(settings.target + ' .a-current-page');
setTimeout(function() {
$('body').removeClass('a-modal-background-error a-displayNav');
$('body').removeClass('a-modal-background-success');
current.removeClass('a-current-page').addClass('a-previous-page');
newPage.removeClass('a-next-page').addClass('a-current-page');
$(newPage).data().enableDirtyPopover = settings.enableDirtyPopover;
if (settings.isError) {
$('body').addClass('a-modal-background-error');
if (settings.showModalNav) {
$('body').addClass('a-displayNav');
}
} else if (settings.isSuccess) {
$('body').addClass('a-modal-background-success');
}
}, 0);
current.on('transitionend', function() {
if (settings.clearHistory) {
$(settings.target + ' :data(page-index)').not('.a-current-page').remove();
} else {
current.hide().off();
}
AltinnLoader.removeLoader(current.find('.a-modal-body'));
});
popoverLocalInit();
});
},
previousModalPage: function(settings) {
var current;
var allPages;
var previous;
var pagesToPop;
var isError;
var showModalNav;
var isSuccess;
if (!settings.pagesToPop) {
pagesToPop = 1;
} else {
pagesToPop = settings.pagesToPop;
}
if ($(settings.target + ' .a-current-page').data('page-index') - pagesToPop <= 0) {
$(settings.target).one('hidden.bs.modal', function() {
$('body').removeClass('a-modal-background-error a-displayNav');
$('body').removeClass('a-modal-background-success');
});
$(settings.target).modal('hide');
return;
}
current = $(settings.target + ' .a-current-page');
allPages = $(settings.target + ' :data(page-index)');
previous = allPages.filter(function() {
return $(this).data('page-index') === allPages.length - 1;
});
previous.show();
isError = $(previous).data().isError;
showModalNav = $(previous).data().showModalNav;
isSuccess = $(previous).data().isSuccess;
current.addClass('a-next-page');
current.removeClass('a-current-page');
// if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {
// goToModalHeader();
// }
setTimeout(function() {
$('body').removeClass('a-modal-background-error a-displayNav');
$('body').removeClass('a-modal-background-success');
previous.addClass('a-current-page').removeClass('a-previous-page');
if (isError) {
$('body').addClass('a-modal-background-error');
if (showModalNav) {
$('body').addClass('a-displayNav');
}
} else if (isSuccess) {
$('body').addClass('a-modal-background-success');
}
}, 0);
current.on('transitionend', function() {
var previousPages = allPages.filter(function() {
return $(this).data('page-index') > allPages.length - pagesToPop;
});
previousPages.remove();
});
},
setCurrentPageIsDirty: function(target, state) {
$(target).find('.a-current-page').first().data().isDirty = state;
},
init: function() {
var that = this;
$('body').on('click', '[data-toggle="altinn-modal"]', function() {
var $source = $(this);
if ($source.data().action === 'load') {
that.loadModal({
url: $source.data().url,
target: $source.data().target,
enableDirtyPopover: $source.data().enableDirtyPopover
});
} else if ($source.data().action === 'next') {
that.nextModalPage({ url: $source.data().url,
target: $source.data().target,
isSuccess: $source.data().isSuccess,
isError: $source.data().isError,
showModalNav: $source.data().showModalNav,
clearHistory: $source.data().clearHistory,
enableDirtyPopover: $source.data().enableDirtyPopover });
} else if ($source.data().action === 'back') {
that.previousModalPage({
target: $source.data().target,
pagesToPop: $source.data().pages
});
} else if ($source.data().action === 'close') {
that.closeModal({ target: $source.data().target });
}
});
$('body').on('click', '.a-modal-back', function() {
var $modal = $(this).closest('.a-modal');
if ($modal.find('.a-current-page').first().data().enableDirtyPopover
&& $modal.find('.a-current-page').first().data().isDirty) {
$(this).popover('show');
} else {
that.previousModalPage({ target: '#' + $modal[0].id });
}
});
$('body').on('click', '.a-modal-close', function() {
var $modal = $(this).closest('.a-modal');
if ($modal.find('.a-current-page').first().data().enableDirtyPopover
&& $modal.find('.a-current-page').first().data().isDirty) {
$(this).popover('show');
} else {
that.closeModal({ target: '#' + $modal[0].id });
}
});
$('body').on('click', '.a-js-modal-dirtyBackBtn', function() {
AltinnModal.previousModalPage({ target: '#' + $(this).closest('.a-modal')[0].id });
$('button[aria-describedby=' + $(this).parent().parent().attr('id') + ']').popover('hide');
});
$('body').on('click', '.a-js-modal-dirtyCancelBtn', function() {
$('button[aria-describedby=' + $(this).parent().parent().attr('id') + ']').popover('hide');
});
$('body').on('click', '.a-js-modal-dirtyCloseBtn', function() {
AltinnModal.closeModal({ target: '#' + $(this).closest('.a-modal')[0].id });
$('button[aria-describedby=' + $(this).parent().parent().attr('id') + ']').popover('hide');
});
function urlQuery(query) { // Parse current URL for query value
var _query = query.replace(/[[]/, '[').replace(/[\]]/, '\\]');
var expr = '[\\?&]' + _query + '=([^&#]*)';
var regex = new RegExp(expr);
var results = regex.exec(window.location.href);
if (results !== null) {
return results[1];
}
return false;
}
if (urlQuery('form') === '1') {
AltinnModal.loadModal({
url: '/hjelp/kontaktskjema-for-hjelp/',
target: '#modal'
});
}
}
};
/* globals compareTo */
var sortListAlphanumerically = function(src, sortIndex) {
var $list = $(src).closest('.a-list-container').find('.a-list');
var rows = $list.find('li:not(.a-list-header)');
var reverse;
var active = $(src).hasClass('a-active');
if (!active) {
$(src).closest('.a-list-container').find('.a-list-sortHeader').removeClass('a-active')
.removeClass('a-js-reverse-sort');
$(src).addClass('a-active');
} else {
$(src).toggleClass('a-js-reverse-sort');
}
reverse = $(src).hasClass('a-js-reverse-sort');
rows.sort(function(a, b) {
var A = $($($($(a).children()[0]).children()[sortIndex]).find('.a-js-sortValue')[0]).text()
.toUpperCase();
var B = $($($($(b).children()[0]).children()[sortIndex]).find('.a-js-sortValue')[0]).text()
.toUpperCase();
return reverse ? compareTo(B, A) : compareTo(A, B);
});
$.each(rows, function(index, row) {
if ($(row).find('.a-js-sortValue').length > 0) {
$list.append(row);
}
});
// handles load more row
$.each(rows, function(index, row) {
if ($(row).find('.a-js-sortValue').length === 0) {
$list.append(row);
}
});
};
var defaultListSort = function() {
$('.a-list-container').each(function() {
var sortHeader = $(this).find('.a-list-sortHeader')[0];
var index = $(sortHeader).index();
sortListAlphanumerically(sortHeader, index);
});
};
var addListSortHandler = function() {
$('.a-list-sortHeader').on('click', function() {
var index = $(this).index();
sortListAlphanumerically(this, index);
});
defaultListSort();
};
/* globals $ */
var toggleFilter = function() {
$('.a-collapse-title').on('keyup', function(e) {
var key = e.which;
if (key === 13) {
e.stopImmediatePropagation(); e.stopPropagation(); e.preventDefault();
$(e.target).trigger('mouseup');
} else if (key === 9) {
if ($($(e.target).attr('data-target')).hasClass('show')) {
$($(e.target).attr('data-target')).find('.a-switch').eq(0)
.trigger('focus');
}
}
});
};
/* globals currentRequest, AltinnQuickhelp */
/* globals AltinnQuickhelp:true */
AltinnQuickhelp = {
listeners: function(target) {
var that = this;
$('.a-stickyHelp-search').find('input').on('keyup', function(e) {
var keyCode = e.keyCode || e.which;
if (keyCode === 13 && encodeURIComponent($(this)[0].value).length > 0) {
that.nextquickhelpPage({
url: $('#a-stickyHelp').attr('data-api') +
encodeURIComponent($(this)[0].value) + '/' + $('html').attr('lang'),
target: target
});
}
});
$('.a-stickyHelp-search').find('button').on('click', function(e) {
if (encodeURIComponent($('.a-js-stickyhelpSearch')[0].value).length > 0) {
that.nextquickhelpPage({
url: $('#a-stickyHelp').attr('data-api') +
encodeURIComponent($('.a-js-stickyhelpSearch')[0].value) + '/' +
$('html').attr('lang'),
target: target
});
}
});
},
nextquickhelpPage: function(settings) {
var currentRequest = $.ajax({
url: settings.url,
beforeSend: function() {
if (typeof currentRequest !== 'undefined') {
currentRequest.abort();
}
}
}).done(function(data) {
var quickhelpPage = $('<div/>', { class: 'quickhelpPage', html: data });
var current; var existingPages; var newPage; var newPageIndex;
existingPages = $(settings.target + ' :data(page-index)');
newPageIndex = existingPages.length + 1;
newPage = $('<div/>', {
class: 'a-page a-next-page',
data: { 'page-index': newPageIndex },
html: quickhelpPage
});
$(settings.target + ' .a-stickyHelp-content-target').append(newPage);
$(settings.target).animate({ scrollTop: 0 }, 20);
current = $(settings.target + ' .a-current-page');
setTimeout(function() {
current.removeClass('a-current-page').addClass('a-previous-page');
newPage.removeClass('a-next-page').addClass('a-current-page');
$(newPage).data();
}, 0);
current.on('transitionend', function() {
if (settings.clearHistory) {
$(settings.target + ' :data(page-index)').not('.a-current-page')
.remove();
} else {
current.off();
}
});
$('#a-js-stickyHelp-back').addClass('d-block');
});
},
previousquickhelpPage: function(settings) {
var current; var allPages; var previous; var pagesToPop;
if (!settings.pagesToPop) {
pagesToPop = 1;
} else {
pagesToPop = settings.pagesToPop;
}
current = $(settings.target + ' .a-current-page');
allPages = $(settings.target + ' :data(page-index)');
previous = allPages.filter(function() {
return $(this).data('page-index') === allPages.length - 1;
});
previous.addClass('a-current-page').removeClass('a-next-page');
current.removeClass('a-current-page').addClass('a-next-page');
setTimeout(function() {
previous.addClass('a-current-page').removeClass('a-previous-page');
}, 0);
current.on('transitionend', function() {
var previousPages = allPages.filter(function() {
return $(this).data('page-index') > allPages.length - pagesToPop;
});
previousPages.remove();
});
if (allPages.length === 2) {
$('#a-js-stickyHelp-back').removeClass('d-block');
}
},
init: function() {
var that = this; that.listeners('#a-stickyHelp');
$('body').on('click', '[data-toggle="quickhelp"]', function() {
var $source = $(this);
if ($source.data().action === 'next') {
that.nextquickhelpPage({
url: $source.data().url, target: $source.data().target
});
} else if ($source.data().action === 'back') {
that.previousquickhelpPage({
target: $source.data().target, pagesToPop: $source.data().pages
});
}
});
$('.a-current-page').data({ 'page-index': 1 });
$('.a-js-stickyHelpCategory')
.html($('#a-stickyHelp').find('.a-stickyHelp-content-target')
.attr('data-category')
);
$('.a-js-stickyHelpCategoryLink').attr('data-url', $('#a-stickyHelp')
.find('.a-stickyHelp-content-target').attr('data-url')
);
$('body').on('click', '.a-stickyHelp-open', function() {
if (!$('.a-js-stickyHelpFrame').attr('src')) {
$('.a-js-stickyHelpFrame')
.attr('src', $('.a-js-stickyHelpFrame').attr('data-src'));
}
});
if ($('.quickhelpPage').find('.a-text').length !== 0) {
$('.quickhelpPage').parent('.a-page').addClass('a-page-hasArticleInside');
}
}
};
/* globals mobileNavigation */
var wasDark = $('header').hasClass('a-darkBackground');
var action = function(e) {
if ($(e.target).closest('.a-globalNav-main').length === 0 &&
$(e.target).closest('.navbar-toggler').length === 0) {
if ($('.a-globalNav-main').is(':visible')) {
$('.navbar-toggler').attr('data-jsexpanded', 'false');
$('.a-globalNav-main').hide();
$('body').css('background-color', '');
if (wasDark) {
$('header').addClass('a-darkBackground');
$('.a-globalNav-logo').find('img')
.attr('src', $('.a-globalNav-logo').find('img').attr('src').replace('blue', 'white'));
}
$('.a-page').children(':not(header)').removeClass('a-js-hidden');
}
} else if ($(e.target).closest('.navbar-toggler').length > 0) {
if ($('.a-globalNav-main').is(':visible')) {
$('.navbar-toggler').attr('data-jsexpanded', 'false');
$('.a-globalNav-main').hide();
$('body').css('background-color', '');
if (wasDark) {
$('header').addClass('a-darkBackground');
$('.a-globalNav-logo').find('img')
.attr('src', $('.a-globalNav-logo').find('img').attr('src').replace('blue', 'white'));
}
$('.a-page').children(':not(header)').removeClass('a-js-hidden');
} else {
$('.navbar-toggler').attr('data-jsexpanded', 'true');
$('.a-globalNav-main').show();
$('body').css('background-color', '#fff');
if (wasDark) {
$('header').removeClass('a-darkBackground');
$('.a-globalNav-logo').find('img')
.attr('src', $('.a-globalNav-logo').find('img').attr('src').replace('white', 'blue'));
}
$('.a-page').children(':not(header)').addClass('a-js-hidden');
}
}
};
function menuHandler() {
// enable tabbing and mouse click on mobile menu btn
if ($('body').width() < 768) {
$('body').on('click', action);
}
}
menuHandler();
$(window).on('resize', function() {
$('body').off('click', action);
menuHandler();
});
var toggleInstant = function() {
$('.a-panelAccordion').on('click', '*[data-toggle="instant"]', function() {
var $target = $(this.dataset.target);
if ($target.is(':visible')) {
$(this).attr('aria-expanded', false);
$target.hide();
$(this).removeClass('a-open');
} else {
$(this).attr('aria-expanded', true);
$target.show();
$(this).addClass('a-open');
}
});
};
/* globals $ */
var autoFootnotes = function() {
// Ideally we should have a generic class name here, but it would break
// existing articles
$('.epi-footnote').not('popovered').each(function(index) {
$(this).hide().addClass('popovered');
$(this).after(
'<a href="javascript:void(0)" ' +
'tabindex="0" ' +
'class="a-linkArea a-helpIconButton a-helpIconButton--blue a-js-togglePopoverIcons" ' +
'role="button" ' +
'data-toggle="popover" ' +
'data-popover-class="footnote"' +
'data-trigger="click"' +
'data-popover-content="epiFootnote_' + index + '">' +
'<i class="ai ai-circle-plus a-js-popoverIconInitial"></i>' +
'<i class="ai ai-circle-minus a-js-popoverIconExpanded"></i>' +
'</a>' +
'<div id="epiFootnote_' + index + '" style="display: none">' +
$(this).html() +
'</div>'
);
});
};
/* globals $ */
var mobileNavigation = function() {
$('.a-globalNav .dropdown').on('show.bs.dropdown', function(e) {
var that = this;
setTimeout(function() {
$(that).find('.a-dropdown-languages').addClass('expand');
$(that).find('.a-dropdown-languages a').removeAttr('tabindex');
$(that).find('.a-dropdown-languages a').removeAttr('aria-hidden');
}, 0);
});
$('.a-globalNav .dropdown').on('hide.bs.dropdown', function(e) {
$(this).find('.a-dropdown-languages').removeClass('expand');
$(this).find('.a-dropdown-languages a').attr('tabindex', '-1');
$(this).find('.a-dropdown-languages a').attr('aria-hidden', 'true');
});
};
/* globals
setupExpandContent
*/
$('body').on('show.bs.collapse', '.a-collapsePanel-body', function(e) {
var that = this;
if ($(e.target).hasClass('a-collapsePanel-body')) {
setTimeout(function() {
var $collapsePanelHeader = $(that).siblings('.a-js-index-heading').first();
var $msgIconWrapper = $collapsePanelHeader.find('.a-inboxHeadingContent')
.find('.a-msgIconSecondary')
.closest('.a-msgIconWrapper');
$msgIconWrapper.find('.reg')
.hide()
.siblings('.a-msgIconSecondary')
.show();
$msgIconWrapper.find('span').attr('aria-hidden', true);
$msgIconWrapper.find('span:last-of-type').removeAttr('aria-hidden');
$('.a-collapsePanel').removeClass('expanded');
$(that).closest('.a-collapsePanel').addClass('expanded');
$('.a-js-index-heading').addClass('dim');
$('.a-collapsePanel.expanded').find('.a-js-index-heading').removeClass('dim');
setupExpandContent();
}, 0);
}
});
$('body').on('hide.bs.collapse', '.a-collapsePanel-body', function(e) {
var that = this;
if ($(e.target).hasClass('a-collapsePanel-body')) {
setTimeout(function() {
var $collapsePanelHeader = $(that).siblings('.a-js-index-heading').first();
$collapsePanelHeader.find('.a-inboxHeadingContent').removeClass('a-msgUnread');
$(that).closest('.a-collapsePanel').removeClass('expanded');
if ($('.a-collapsePanel.expanded').length === 0) {
$('.a-js-index-heading').removeClass('dim');
} else {
$collapsePanelHeader.addClass('dim');
}
}, 0);
}
});
$('.a-js-collapseInboxMessage').click(function() {
$('div.card.a-accordion-card.a-collapsePanel.expanded a[data-toggle="collapse"]').click();
});
var setupOnKeypress = function() {
$('body').on('keydown', '.a-clickable, .a-selectable', function(e) {
var key = e.which;
if ($(e.target).hasClass('a-clickable') || $(e.target).hasClass('a-selectable')) {
if (key === 13) {
$(this).click();
return false;
}
}
return true;
});
};
var setupNestedCheckboxes = function() {
$('[data-toggle="nestedCheckbox"]').on('change', function() {
var target = $(this).data('target');
if ($(this).is(':checked')) {
$(target).show();
} else {
$(target).hide();
}
});
$('[data-toggle="nestedCheckbox"]').each(function() {
if (!$(this).is(':checked')) {
$($(this).data('target')).hide();
}
});
};
/* globals $ */
// used for popovers
var tooltip = function() {
$('[data-toggle="tooltip"]').tooltip();
};
var compareTo = function(firstItem, secondItem) {
var first;
var second;
if (firstItem === undefined && secondItem === undefined) {
return 0;
}
if (firstItem === undefined) {
return 1;
}
if (secondItem === undefined) {
return -1;
}
first = firstItem.toString();
second = secondItem.toString();
if (first < second) {
return -1;
}
if (first > second) {
return 1;
}
return 0;
};
$('.a-dropdown-personswitchList').on('click', 'button[data-toggle="collapse"]', function(event) {
event.preventDefault();
event.stopPropagation();
$($(this).data('target')).collapse('toggle');
});
var setValidatorSettings = function() {
var defaultOptions = {
highlight: function(element, errorClass, validClass) {
$(element).closest('.form-group').addClass(errorClass);
},
unhighlight: function(element, errorClass, validClass) {
$(element).closest('.form-group').removeClass(errorClass);
},
focusInvalid: false
};
$.validator.setDefaults(defaultOptions);
$.validator.unobtrusive.options = {
errorClass: 'has-error'
};
};
/* globals $ */
var popoverLocalInit = function() {
var options = {
html: true,
placement: function(context, source) {
var position = $(source).offset();
$(context).addClass($(source).attr('data-popover-class'));
if ($(source).hasClass('a-js-popoverBig')) {
return 'bottom';
}
if (position.left < 125) {
return 'right';
}
if (position.left > ($(document).width() - $(source).width() - 125)) {
return 'left';
}
return 'bottom';
},
content: function() {
if ($(this).attr('data-popover-content')) {
return $('#' + $(this).data('popover-content')).html();
}
return false;
},
template: '<div class="popover" role="popover" tabindex="0"><div class="arrow"></div><div class="popover-body"></div></div>'
};
$('[data-toggle="popover"]').popover(options);
$('.a-js-togglePopoverIcons').each(function() {
// $(this).find('i').eq(1).hide();
$(this).find('.a-js-popoverIconExpanded').hide();
});
$('.a-js-popoverIconExpanded').on('click', function() {
$('.a-js-popoverIconExpanded').hide();
$('.a-js-popoverIconInitial').show();
// $(this).hide();
// $('.a-js-popoverIconInitial').show();
});
$('.a-js-popoverIconInitial').on('click', function() {
$(this).hide();
$(this).parent().find('.a-js-popoverIconExpanded').show();
});
};
var forceFocusTriggerElement;
var popoverGlobalInit = function() {
$('[data-toggle="dropdown"]').on('click', function(e) {
if (window.innerWidth < 992) {
$('.a-dropdown-overflow-menu-right').removeClass('dropdown-menu-right');
} else {
$('.a-dropdown-overflow-menu-right').addClass('dropdown-menu-right');
}
});
$('body').on('show.bs.popover', '[data-toggle="popover"].a-js-tabable-popover', function(e) {
var triggerElement = this;
$(triggerElement).closest('.a-modal').scrollTop(0);
});
$('body').on('shown.bs.popover', '[data-toggle="popover"].a-js-tabable-popover', function(e) {
var triggerElement = this;
setTimeout(function() {
$(triggerElement).after($($(triggerElement).data('bs.popover').tip));
$(triggerElement).closest('.a-modal').one('scroll', function() {
$('[data-toggle="popover"]').popover('hide');
});
}, 0);
});
$('body').on('shown.bs.popover', '[data-toggle="popover"].a-js-popover-forceFocus', function(e) {
$('body').append($('<button class="sr-only a-js-popoverTrick">ignoreme</button>'));
forceFocusTriggerElement = this;
$(forceFocusTriggerElement).one('blur', function() {
var that = this;
if (forceFocusTriggerElement) {
$($(this).data('bs.popover').tip).find('button,input,a,textarea').filter(':visible:first').focus();
}
});
});
$('body').on('hidden.bs.popover', '[data-toggle="popover"].a-js-popover-forceFocus', function(e) {
$('body').find('.a-js-popoverTrick').remove();
});
// hides popover when the cehckbutton is checked
$('body').on('focus', '[data-toggle="popover"].sr-only', function(e) {
if ($(this).is(':checked')) {
$(this).popover('hide');
} else {
$(this).popover('show');
}
});
// show/hide popover on checkbutton change
$('body').on('change', 'a-switch[data-toggle=popover]', function() {
if ($(this).is(':checked')) {
$(this).popover('hide');
} else {
$(this).popover('show');
}
});
// Hide all existing popovers when opening a new popover
$('body').on('click', '[data-toggle="popover"]', function(e) {
$('[data-toggle="popover"]').not(this).popover('hide');
});
// Hide all existing popovers when focusing a new element
// which is not the open popover or any of its content
$('body').on('blur', '[data-toggle="popover"], .popover *', function(e) {
setTimeout(function() {
var $focused = $(':focus');
if ((($focused.length !== 0 || forceFocusTriggerElement)
&& !$focused.hasClass('popover')
&& !$focused.parents('.popover').length >= 1) || $focused.hasClass('a-js-popoverTrick')) {
if (forceFocusTriggerElement) {
$(forceFocusTriggerElement).focus();
forceFocusTriggerElement = false;
}
// disable blur when in modal to allow use of non-original scrollbar
if ($('.modal.show').length > 0) {
$('.popover-big[data-toggle="popover"]').popover('hide');
}
}
}, 0);
});
// Hide popovers when clicking on something else than the trigger element
// and the popover itself
$('body').on('click', function(e) {
if ($(e.target).data('toggle') !== 'popover'
&& $(e.target).parents('[data-toggle="popover"]').length === 0
&& $(e.target).parents('.popover.show').length === 0) {
$('[data-toggle="popover"]').popover('hide');
forceFocusTriggerElement = false;
$(this).parent().find('.a-js-popoverIconInitial').show();
$(this).parent().find('.a-js-popoverIconExpanded').hide();
}
});
function resetTranslate() {
$('.popover-big').attr('style', $('.popover-big').attr('style').replace(/translateX\(.*?\)/, 'translateX(0px)'));
}
function adjustBig() {
var modalHeight;
var padding;
if ($('.popover-big').length > 0) {
if ($('.modal.show').length > 0) {
// Add padding to make sure modal is big enough to contain popover
modalHeight = $('.modal-dialog').height() + $('.modalPage').height();
padding = ($('.popover').offset().top + $('.modal').scrollTop() + $('.popover').height() + 5) - modalHeight;
$('.modalPage').css('padding-bottom', padding + 'px');
// tranlate is somehow added by Bootstrap later when in modal??
setTimeout(resetTranslate, 0);
} else {
resetTranslate();
}
}
}
$('body').on('shown.bs.popover', '.a-js-persistPopover', function() {
$('.arrow').html('<style>.popover-big:after { left: ' + ($(this).offset().left + 10.5) + 'px !important; }</style>');
$('html, body').animate({
scrollTop: $('.a-js-persistPopover').offset().top - 50
}, 250);
adjustBig();
});
// clean up modal page fix
$('body').on('hidden.bs.popover', 'a-js-persistPopover', function(e) {
$('.modalP