UNPKG

altinn-designsystem

Version:

Altinn Design system based on Pattern Lab.

634 lines (555 loc) 21.1 kB
/* 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'); } }); } }); }; /* 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 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 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 enableIOS11Fix, disableIOS11Fix, iOS11BugWorkAround */ var enableIOS11Fix = function() { // We disable scrolling by hiding everything not in view document.body.style.overflow = 'hidden'; document.body.style.position = 'fixed'; // It seems we don't need to set these, but I'm leaving there here for now // Should be reversed in the disableIOS11Fix function if we enable them // document.body.style.height = '100%'; // document.body.style.width = '100%'; }; var disableIOS11Fix = function() { document.body.style.overflow = 'auto'; document.body.style.position = 'static'; }; var isAffectedPlatform = function() { // Needs to be updated if new versions are affected var ua = navigator.userAgent; var iOS = /iPad|iPhone|iPod/.test(ua); var iOS11 = /OS 11_/.test(ua); return (iOS && iOS11); }; var iOS11BugWorkAround = function() { // Detect iOS 11_x affected by cursor position bug // Bug report: https://bugs.webkit.org/show_bug.cgi?id=176896 if (isAffectedPlatform()) { // This should run in the parent page only, not in the modal if ($('body.a-stickyHelp-body').length === 0) { // We enable the fix only when the help button is clicked/tapped $('.a-stickyHelp-open').on('click', function() { enableIOS11Fix(); }); } // This should be running inside the iframe $('.a-stickyHelp-close').on('click', function() { // When the close button in the sticky help window is clicked/tapped // we disable the fix, otherwise the page will not scroll window.parent.disableIOS11Fix(); }); } }; /* globals AltinnModal, AltinnQuickhelp, handleFocus, iOS11BugWorkAround, window, */ window.infoportalInit = function() { AltinnModal.init(); AltinnQuickhelp.init(); handleFocus(); iOS11BugWorkAround(); }; window.infoportalInit(); // $(document).foundation(); //# sourceMappingURL=maps/quickhelp.js.map