{"version":3,"file":"script.js","sources":["script.js"],"sourcesContent":["/* global tns Drupal jQuery window cookiehub */\n\n/**\n * Martela theme javascript\n *\n * @param {jQuery} $ jQuery object\n * @param {Drupal} Drupal Drupal object\n */\n;(function ($, Drupal) {\n 'use strict';\n\n $(document).ready(function () {\n martelaLangSelect();\n megamenuClasses();\n martelaMobilemenuIsOpen();\n martelaSearchBlock();\n sectionSubmenuClasses();\n martelaWrapTables();\n martelaBackgroundImageCarousel();\n martelaProductImageCarousel();\n martelaCasesFilter();\n martelaSliderCalculations();\n martelaShowForm();\n\n /**\n * Contact form jumper\n * Jumps to the selected contact form\n * @param {jQuery} el jQuery object of the select element\n */\n function martelaContactFormJumper(el) {\n el.off('change').on('change', function () {\n var url_form = el.find(':selected').data('url');\n var win_form = window.open(url_form, '_self');\n win_form.focus();\n });\n }\n\n let contactFormJumpMenu = $('.contact-forms .js-viewsJumpMenu');\n martelaContactFormJumper(contactFormJumpMenu);\n let contactFormJumpMenuUs = $('.view-mar-contact-us-office-listing .js-viewsJumpMenu');\n martelaContactFormJumper(contactFormJumpMenuUs);\n });\n\n /* Wrap tables */\n function martelaWrapTables() {\n let tables = $('table');\n if (tables.length > 0) {\n tables.wrap('
');\n }\n }\n\n /* Language switcher */\n function martelaLangSelect() {\n var langSelect = $('.lang-select');\n var langSelectButton = $('');\n if (langSelect.length > 0) {\n // Wrap language menu\n langSelect.wrap('
');\n // Include a toggle button\n $('.language-toggle-wrapper').prepend(langSelectButton);\n // Toggle classes on click\n langSelectButton.click(function () {\n $(this).toggleClass('selection-open');\n $('.language-list-wrapper').toggleClass('visible');\n });\n }\n }\n\n /* Megamenu classes */\n function megamenuClasses() {\n // Add classes to certain links' parent elements\n var menuBase = $('.region-navigation .block-superfish');\n var megamenuLink = menuBase.find('li.sf-depth-1 a.megamenu');\n var hugeLink = menuBase.find('li a.huge-link');\n var spanColumnsLink = menuBase.find('li a.span-all-columns');\n\n if (megamenuLink.length > 0) {\n megamenuLink.each(function () {\n $(this).parent('li').addClass('megamenu-item');\n });\n }\n if (hugeLink.length > 0) {\n hugeLink.each(function () {\n $(this).parent('li').addClass('huge-link-item');\n });\n }\n if (spanColumnsLink.length > 0) {\n spanColumnsLink.each(function () {\n $(this).parent('li').addClass('span-all-columns-item');\n });\n }\n }\n\n /* Section starting page submenu classes */\n function sectionSubmenuClasses() {\n if ($('.section-2nd-level-menu').length > 0) {\n // Find the first active menu link and add a class to it\n var firstActiveLink = $('.section-2nd-level-menu ul.menu li a.is-active').first();\n firstActiveLink.addClass('first-active');\n }\n }\n\n /* Mobile menu open class */\n function martelaMobilemenuIsOpen() {\n var mobilemenuToggle = $('.region-navigation .mobilemenu .sf-accordion-toggle a');\n // Toggle class on body when mobile menu toggle is clicked\n if (mobilemenuToggle.length > 0) {\n mobilemenuToggle.on('click', function () {\n $('body').toggleClass('mobilemenu-is-open');\n });\n }\n }\n\n /* Search block */\n function martelaSearchBlock() {\n var regionNavigation = $('.region-navigation .addsearch-block');\n var searchbuttonToggle = regionNavigation.find('.form-enable-button');\n var searchForm = regionNavigation.find('form');\n var searchbuttonSubmit = searchForm.find('.form-submit');\n var headerBlockFieldset = regionNavigation.find('fieldset');\n var headerSearchWidget = $('#ui-id-1');\n\n // Toggle class on body when mobile menu toggle is clicked\n if (searchbuttonToggle.length > 0) {\n headerBlockFieldset.remove();\n searchbuttonToggle.on('click', function () {\n searchForm.toggleClass('show');\n });\n\n searchbuttonSubmit.on('click', function () {\n searchForm.removeClass('show');\n headerSearchWidget.css('display', 'none');\n });\n searchForm.keyup(function (e) {\n if (e.keyCode === 13) {\n searchForm.removeClass('show');\n headerSearchWidget.css('display', 'none');\n }\n });\n }\n }\n\n /* Cases page filter */\n function martelaCasesFilter() {\n var allCasesForm = $('.all-cases #views-exposed-form-cases-block-all-cases');\n var allCasesSelect = $('.select2-widget', allCasesForm);\n var allCasesSubmit = $('#edit-actions', allCasesForm);\n\n allCasesSubmit.css({ display: 'none', visibility: 'hidden' });\n\n allCasesSelect.change(function () {\n allCasesForm.submit();\n });\n }\n\n /**\n * Frontpage background carousel\n * Powered by Tiny Slider\n */\n function martelaBackgroundImageCarousel() {\n var carouselContentSelector = '.carousel-content';\n var carouselContainer = carouselContentSelector + ' .view-content';\n var carouselImagesSelector = '.carousel-images';\n var carouselContent = $(carouselContentSelector);\n var carouselImages = $(carouselImagesSelector);\n\n if (carouselContent.length && carouselImages.length) {\n if (typeof tns !== 'undefined') {\n var slider = tns({\n autoplay: true,\n autoplayButtonOutput: false,\n autoplayHoverPause: false,\n autoplayTimeout: 10000,\n container: carouselContainer,\n items: 1,\n slideBy: 1,\n speed: 200,\n nav: false,\n onInit: function () {\n // When carousel is started\n // - set first item as active\n // - set other items inactive\n $('.views-row', carouselImages).not(':first').addClass('inactive').css('opacity', 0);\n $('.views-row', carouselImages).first().addClass('active').css('opacity', 1);\n },\n });\n // Bind function to indexChanged event\n slider.events.on('indexChanged', customizedFunction);\n }\n }\n }\n\n /**\n * When carousel index is changed\n * Notice: the index will change TWICE when carousel loops around\n */\n var customizedFunction = function (info, eventName) {\n var carouselImagesSelector = '.carousel-images';\n var carouselImages = $(carouselImagesSelector);\n\n // Set active slide as inactive and set its opacity to 0\n $('.views-row.active', carouselImages)\n .toggleClass('active inactive')\n .animate({ opacity: 0 }, 0, function () {\n // After that set the displayed slide as active and set its opacity to 1\n $('.views-row', carouselImages)\n .eq(info.displayIndex - 1)\n .toggleClass('active inactive')\n .animate({\n opacity: 1,\n }, 0);\n });\n };\n\n /**\n * Product image carousel\n * Powered by Tiny Slider\n */\n function martelaProductImageCarousel() {\n var carouselContainer = ' .product-image-gallery';\n\n if ($(carouselContainer).length) {\n if (typeof tns !== 'undefined') {\n tns({\n autoplay: false,\n autoplayButtonOutput: false,\n autoplayHoverPause: false,\n autoplayTimeout: 10000,\n container: carouselContainer,\n items: 1,\n nav: true,\n navPosition: 'bottom',\n slideBy: 1,\n speed: 200,\n });\n }\n }\n }\n\n // COOKIE CHECK\n if (window.cookiehub) {\n $(window).on('load', function () {\n youtubeCookieCheck();\n });\n }\n\n // Create mutation observer to observe video link visibility which is toggled by cookiehub based on the user's cookie category selection.\n var observer = new MutationObserver(() => youtubeCookieCheck());\n\n var target = $('.video-link');\n target.each(function () {\n observer.observe($(this)[0], { attributes: true });\n });\n\n // Check if visitor has checked analytics in CookieHub and show/hide iframe block\n function youtubeCookieCheck() {\n let cookieHubVideoWrapper = $('.video-thumbnail .cookiehub-actions-wrapper');\n if (window.cookiehub.hasConsented('analytics')) {\n cookieHubVideoWrapper.addClass('hidden');\n } else {\n cookieHubVideoWrapper.removeClass('hidden');\n }\n }\n\n /**\n * Martela Drupal object\n */\n let martelaDrupal = {};\n /* Open stuff in a modal */\n martelaDrupal.martelaOpenModal = context => {\n if (typeof $.magnificPopup !== 'undefined') {\n // Video modal\n let videoLink = $('.video-link');\n if (videoLink.length > 0) {\n videoLink.magnificPopup({\n type: 'iframe',\n });\n }\n // Image gallery modal\n let imageGallery = $('.image-gallery');\n if (imageGallery.length > 0 && $('.gallery-image-link').length > 0) {\n imageGallery.each(function () {\n // the containers for all your galleries\n $(this).magnificPopup({\n delegate: 'a.gallery-image-link', // the selector for gallery item\n type: 'image', gallery: {\n enabled: true,\n },\n });\n });\n }\n // Inline modal\n let marOpenModal = $('.mar-open-modal');\n if (marOpenModal.length > 0) {\n marOpenModal.each(function () {\n $(this).magnificPopup({\n items: {\n src: $(this).next('.mfp-hide'), midClick: true, type: 'inline',\n },\n });\n });\n }\n }\n };\n /* Add class to body when megamenu is open */\n martelaDrupal.martelaMegaMenuIsOpen = context => {\n // Find menu links with megamenu class and their parent element\n var $megamenuParents = $('.region-navigation .sf-horizontal a.megamenu').parent('li');\n\n // Bail out early\n if (!$megamenuParents.length) {\n return null;\n }\n\n var $body = $('body');\n var observedClass = 'sfHover';\n\n // Binds a class name to a predicate for filtering element arrays\n var filterElementsByClass = className => element => element.classList.contains(className);\n\n // A predicate for filtering away null values from arrays\n var notNull = value => value !== null;\n\n // A mapping function used to map applicable mutation objects to DOM elements\n var mutationToElement = mutation => mutation.attributeName === 'class' ? mutation.target : null;\n\n // Handles mutation batches\n var handleMutations = function (elements) {\n var filtered = elements.filter(filterElementsByClass(observedClass));\n var fn = filtered.length ? 'addClass' : 'removeClass';\n $body[fn]('menu-is-open');\n };\n\n // Observes element mutations and batches them\n var observer = new MutationObserver(function (mutations) {\n var mutatedElements = mutations.map(mutationToElement).filter(notNull);\n window.requestAnimationFrame(() => handleMutations(mutatedElements));\n });\n\n // Attach observer\n $megamenuParents.each(function () {\n observer.observe(this, { attributes: true });\n });\n };\n\n /**\n * Attach functions to Drupal behaviors\n * @see https://www.drupal.org/docs/drupal-apis/javascript-api/javascript-api-overview\n *\n * @inheritDoc\n * @param {Document|HTMLElement} context The context in which to attach the behavior\n * @param {?Object} settings An object containing settings for the current context\n */\n Drupal.behaviors.attach = (context, settings) => {\n martelaDrupal.martelaOpenModal(context);\n martelaDrupal.martelaMegaMenuIsOpen(context);\n };\n\n // Functions for calculating logarithmic scale for sliders\n\n /**\n * Calculate logarithmic scale for slider\n *\n * @param {number} val Slider value\n * @param {number} min Minimum value\n * @param {number} max Maximum value\n * @returns {number} Calculated value\n */\n function logPosition(val, min, max) {\n var minV = Math.log(min);\n var maxV = Math.log(max);\n var scale = (maxV - minV) / (max - min);\n return (Math.log(val) - minV) / scale + min;\n }\n\n /**\n * Calculate exponential scale for slider\n * @param {number} val Slider value\n * @param {number} min Minimum value\n * @param {number} max Maximum value\n * @returns {number} Exponential value\n */\n function exp(val, min, max) {\n var minV = Math.log(min);\n var maxV = Math.log(max);\n var scale = (maxV - minV) / (max - min);\n return Math.exp(minV + scale * (val - min));\n }\n\n function martelaSliderCalculations() {\n // Create a slider for users\n var userHandle = $('#slider-value-users');\n var uStartValue = 30;\n var uMinValue = 5;\n var uMaxValue = 5000;\n\n // Create a slider for area\n var aStartValue = 300;\n let sliderValueArea = $('#slider-value-area');\n sliderValueArea.text(aStartValue);\n\n /**\n * Handle user slider\n * @param {string} value Slider value\n */\n function handleUserSlider(value) {\n sliderValueArea.text(value * 10);\n }\n\n // Slider for users space\n $('#spaceUsers').slider({\n value: Number(logPosition(uStartValue, uMinValue, uMaxValue).toFixed(0)),\n min: uMinValue,\n max: uMaxValue,\n orientation: 'vertical',\n create: () => userHandle.text(uStartValue),\n slide: (event, ui) => userHandle.text(Number(exp(ui.value, uMinValue, uMaxValue).toFixed(0))),\n change: (event, ui) => {\n handleUserSlider(Number(exp(ui.value, uMinValue, uMaxValue)).toFixed(0));\n handleSliderCalculations();\n },\n });\n\n // Increment and decrement buttons for area slider\n\n $('.increment').on('click', function () {\n var current = sliderValueArea.text();\n var newValue = Number(current) + 1;\n handleSliderCalculations();\n return sliderValueArea.text(newValue);\n });\n $('.decrement').on('click', function () {\n var current = sliderValueArea.text();\n var newValue = Number(current) - 1;\n handleSliderCalculations();\n return sliderValueArea.text(newValue);\n });\n\n // Simple calculations on separated chained functions\n handleSliderCalculations();\n\n // Also on currency dropdown\n $('#currency-dropdown').change(() => handleSliderCalculations());\n sliderValueArea.change(() => handleSliderCalculations());\n }\n\n /**\n * Get currency multiplier based on dropdown value\n * @param {string} dropdown\n * @return {number}\n */\n function getCurrencyMultiplier(dropdown) {\n switch (dropdown) {\n case 'eur':\n return 40;\n default:\n return 400;\n }\n }\n\n /**\n * Get currency marker based on value\n * @param {string} value\n * @return {string}\n */\n function getCurrencyMarker(value) {\n switch (value) {\n case 'eur':\n return '€';\n default:\n return 'KR';\n }\n }\n\n /**\n * Calculate value based on space value and currency\n *\n * @param {number} spaceValue Space value\n * @param {number} currency Currency multiplier\n * @returns {number}\n */\n function calculateValue(spaceValue, currency) {\n return Math.round((spaceValue / 10) * currency);\n }\n\n /**\n * Handle calculations for the slider\n */\n function handleSliderCalculations() {\n // Get lang from url\n var pathname = window.location.pathname;\n var lang = pathname.split('/');\n var currency1 = currencyChoice(lang[1]);\n var currencyMultiplier = getCurrencyMultiplier(currency1);\n var currency = getCurrencyMarker(currency1);\n var spaceValue = Number($('#slider-value-area').text());\n var calculatorPrice = calculateValue(spaceValue, currencyMultiplier) + ' ';\n var currencyValue = currency + Drupal.t('/kk');\n\n let valueBlock = $('.value-block');\n valueBlock.find('.value').text(calculatorPrice);\n valueBlock.find('.valuecurrency').text(currencyValue);\n\n // Set global variables for sliders\n window.sliderPrice = {\n value: calculatorPrice,\n };\n window.sliderPeople = {\n value: Number(\n exp(\n $('#spaceUsers').slider('option', 'value'),\n 5,\n 5000\n ).toFixed(0)\n ),\n };\n window.sliderArea = {\n value: spaceValue,\n };\n }\n\n function martelaShowForm() {\n $('.add-to-form').click(function (el) {\n el.preventDefault();\n el.parents().find('.calculation-sliders').css('display', 'none');\n $('.module-inner-row').find('#lomake-id').toggle();\n $('html, body').animate({ scrollTop: el.offset().top }, 'slow');\n });\n }\n\n /**\n * Currency choice from language\n *\n * @param {string} lang\n * @return {string}\n */\n function currencyChoice(lang) {\n switch (lang) {\n case 'sv':\n return 'sek';\n case 'no':\n return 'nok';\n default:\n return 'eur';\n }\n }\n\n})(jQuery, Drupal);\n\ndocument.addEventListener('DOMContentLoaded', function () {\n // Brevo custom event code\n var sibSubmitButton = document.evaluate(\n '//*[@id=\\'sib-form\\']/div/div/button',\n document,\n null,\n XPathResult.FIRST_ORDERED_NODE_TYPE,\n null\n ).singleNodeValue;\n if (sibSubmitButton) {\n sibSubmitButton.addEventListener(\n 'click',\n function () {\n window.sendinblue.track(\n 'trackFormSubmit',\n { email: document.getElementById('EMAIL').value },\n { id: 'trackFormSubmit', data: { url: window.location.href } }\n );\n }\n );\n }\n});\n"],"names":["$","Drupal","document","ready","langSelect","langSelectButton","length","wrap","prepend","click","this","toggleClass","searchForm","headerSearchWidget","carouselImages","allCasesForm","megamenuLink","menuBase","find","hugeLink","spanColumnsLink","each","parent","addClass","mobilemenuToggle","on","regionNavigation","searchbuttonToggle","searchbuttonSubmit","headerBlockFieldset","remove","removeClass","css","keyup","e","keyCode","first","tables","carouselContent","carouselContentSelector","tns","autoplay","autoplayButtonOutput","autoplayHoverPause","autoplayTimeout","container","items","slideBy","speed","nav","onInit","not","events","customizedFunction","carouselContainer","navPosition","allCasesSelect","display","visibility","change","submit","martelaSliderCalculations","userHandle","let","sliderValueArea","text","slider","value","Number","val","min","max","minV","Math","log","scale","toFixed","orientation","create","slide","event","ui","exp","handleSliderCalculations","current","newValue","martelaContactFormJumper","el","off","url_form","data","window","open","focus","preventDefault","parents","toggle","animate","scrollTop","offset","top","contactFormJumpMenuUs","info","eventName","opacity","eq","displayIndex","observer","cookiehub","youtubeCookieCheck","MutationObserver","cookieHubVideoWrapper","hasConsented","observe","attributes","martelaDrupal","maxV","currency1","lang","location","pathname","split","currencyMultiplier","currency","spaceValue","calculatorPrice","round","currencyValue","t","valueBlock","sliderPrice","sliderPeople","sliderArea","martelaOpenModal","context","marOpenModal","magnificPopup","videoLink","type","imageGallery","delegate","gallery","enabled","src","next","midClick","martelaMegaMenuIsOpen","$megamenuParents","$body","notNull","mutationToElement","mutation","attributeName","target","mutations","mutatedElements","map","filter","requestAnimationFrame","elements","className","fn","element","classList","contains","behaviors","attach","settings","jQuery","addEventListener","sibSubmitButton","evaluate","XPathResult","FIRST_ORDERED_NODE_TYPE","singleNodeValue","sendinblue","track","email","getElementById","id","url","href"],"mappings":"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"}