1let ajax_current_page=1;let swiper_sliders=[];let filterTags;jQuery(function($){const $header=$('#header');initMenu();initFixedHeader();initMobileMenu();initYoastAccordion();initSearchPanel();initPostViews();initShowMoreResources();initAjaxSearch();initCardClickable();initRelatedPostsTabs();initFloatTOC();initScrollProgressBar();function initMenu(){$(document).on('click','.has-dropdown > a',function(e){if($(this).attr('href')!=='#')return;e.preventDefault();if($(this).parent().hasClass('active')){$(this).parent().removeClass('active');$header.removeClass('has-dropdown-active')}else{$('.has-dropdown').removeClass('active');$(this).parent().addClass('active');$header.addClass('has-dropdown-active');setTimeout(function(){balanceSubmenuHeights()},10)}});$(document).on('click','body',function(e){if(!$(e.target).closest('.has-dropdown').length){$('.has-dropdown').removeClass('active');$header.removeClass('has-dropdown-active')}})} 2function initFixedHeader(){const fix_start=$('.page-wrap').hasClass('with-top-bar')?$('.top-bar').innerHeight():0;if($(window).scrollTop()>fix_start){$header.addClass('fixed')} 3let lastScrollTop=0;$(window).on('scroll',function(){let st=$(this).scrollTop();if(st>fix_start){$header.addClass('fixed')}else{$header.removeClass('fixed')} 4if(st>$header.height()){$header.addClass('scrolled')}else{$header.removeClass('scrolled')} 5if(st>lastScrollTop){$header.removeClass('scroll-up').addClass('scroll-down')}else if(st<lastScrollTop){$header.removeClass('scroll-down').addClass('scroll-up')} 6lastScrollTop=st})} 7function initMobileMenu(){const $menuToggle=$('#menu-toggle');$menuToggle.on('click',function(e){e.preventDefault();$menuToggle.toggleClass('active');$('#nav').toggleClass('show');$('body').toggleClass('fixed')});$('.has-dropdown > a[href="#"]').on('click',function(e){e.preventDefault();var scroll_block=!1;if(!$(this).find('.open-dropdown').hasClass('active')){$(this).parent().siblings().find('.open-dropdown').removeClass('active');$(this).parent().siblings().find('.sub-menu').removeClass('show');$(this).parent().siblings().removeClass('opened');scroll_block=!0} 8$(this).find('.open-dropdown').toggleClass('active');$(this).parent().find('.sub-menu').toggleClass('show');$(this).parent().toggleClass('opened');if($(this).parent().hasClass('opened')){setTimeout(function(){balanceSubmenuHeights()},10)} 9if(scroll_block){const $menu=$('.mobile-nav-hold');const $target=$(this).parent();const targetOffset=$target.offset().top;const menuOffset=$menu.offset().top;const currentScroll=$menu.scrollTop();const scrollTo=targetOffset-menuOffset+currentScroll;$menu.animate({scrollTop:scrollTo},300)}});$('a[href!="#"] .open-dropdown').on('click',function(e){e.preventDefault();if(!$(this).hasClass('active')){$(this).parent().parent().siblings().find('.open-dropdown').removeClass('active');$(this).parent().parent().siblings().find('.sub-menu').removeClass('show');$(this).parent().parent().siblings().removeClass('opened')} 10$(this).toggleClass('active');$(this).parent().next().toggleClass('show');$(this).parent().parent().toggleClass('opened');if($(this).parent().parent().hasClass('opened')){setTimeout(function(){balanceSubmenuHeights()},10)}})} 11function initYoastAccordion(){const $faqBlock=$('.wp-block-yoast-faq-block');if($faqBlock.length===0) 12return;const yoast={accordion:function(){$faqBlock.find('.schema-faq-question').on('click',function(){$(this).nextAll('.schema-faq-answer').eq(0).slideToggle('fast',function(){if($(this).hasClass('close')){$(this).removeClass('close');$(this).closest('.schema-faq-section').removeClass('opened')}else{$(this).addClass('close');$(this).closest('.schema-faq-section').addClass('opened')}});$(".schema-faq-answer").not($(this).nextAll('.schema-faq-answer').eq(0)).each(function(){$(this).slideUp('fast');$(this).closest('.schema-faq-section').removeClass('opened');$(this).removeClass('close')})});const $faqQuestions=$faqBlock.find('.schema-faq-question');$faqQuestions.on('click',function(){$faqQuestions.not($(this)).removeClass('close');if($(this).hasClass('close')){$(this).removeClass('close');$(this).closest('.schema-faq-section').removeClass('opened')}else{$(this).addClass('close');$(this).closest('.schema-faq-section').addClass('opened')}})}};yoast.accordion()} 13function initSearchPanel(){$('#toggle-search-panel').on('click',function(e){e.preventDefault();const $header=$('#header');$header.toggleClass('search-panel-active');if($header.hasClass('search-panel-active')){$('.search-panel input[type="text"]').trigger('focus')}});$(document).on('click',function(e){const $header=$('#header');const $searchPanel=$('.search-panel');const $toggleButton=$('#toggle-search-panel');if($header.hasClass('search-panel-active')&&!$searchPanel.is(e.target)&&$searchPanel.has(e.target).length===0&&!$toggleButton.is(e.target)&&$toggleButton.has(e.target).length===0){$header.removeClass('search-panel-active')}});$('.search-panel').on('click',function(e){e.stopPropagation()})} 14function initAjaxNextPrev(){if($('.rt-carousel-nav').length===0){return} 15$(document).on('click','.rt-carousel-nav a',function(e){const $link=$(this);let $container=$('.main-text');if($container.length===0)return;e.preventDefault();let href=$link.attr('href');$.get(href,function(data){const $newContent=$(data).find('.main-text').html();if($newContent){$container.html($newContent);
15const newTitle=$(data).filter('title').text()||$(data).find('title').text();if(newTitle){document.title=newTitle} 16window.history.pushState({},newTitle,href)}})})} 17function initPostViews(){if(typeof ajax_object!=='undefined'&&ajax_object.post_id&&ajax_object.post_views_nonce){const postId=ajax_object.post_id;const storageKey='post_view_'+postId;cleanupOldPostViews();const lastViewTime=localStorage.getItem(storageKey);const currentTime=new Date().getTime();const twentyFourHours=24*60*60*1000;if(lastViewTime&&(currentTime-parseInt(lastViewTime))<twentyFourHours){console.log('Post view already counted within 24 hours');return} 18setTimeout(function(){$.ajax({url:ajax_object.ajax_url,type:'POST',data:{action:'increment_post_views',post_id:postId,nonce:ajax_object.post_views_nonce},success:function(response){if(response.success){localStorage.setItem(storageKey,currentTime.toString());console.log('Post view counted: '+response.data.views+' total views')}else{console.log('Post view not counted: '+response.data)}},error:function(){console.log('Error counting post view')}})},2000)}} 19function cleanupOldPostViews(){const currentTime=new Date().getTime();const twentyFiveHours=25*60*60*1000;for(let i=localStorage.length-1;i>=0;i--){const key=localStorage.key(i);if(key&&key.startsWith('post_view_')){const timestamp=localStorage.getItem(key);if(timestamp&&(currentTime-parseInt(timestamp))>twentyFiveHours){localStorage.removeItem(key)}}}} 20function initShowMoreResources(){$('.more-resources a').on('click',function(e){e.preventDefault();const $button=$(this);const $moreContainer=$button.parent().parent().find('.more-resources');const $resourcesBlock=$button.closest('.rt-resources-block');const $hiddenItems=$resourcesBlock.find('.resources-list .d-none');const limit=parseInt($moreContainer.data('limit'))||6;const limitMobile=parseInt($moreContainer.data('limit-mobile'))||limit;const isMobile=$(window).width()<768;const itemsToShow=isMobile?limitMobile:limit;if($hiddenItems.length>0){const $itemsToShow=$hiddenItems.slice(0,itemsToShow);$itemsToShow.removeClass('d-none').hide().fadeIn(300);const $remainingHidden=$resourcesBlock.find('.resources-list .d-none');if($remainingHidden.length===0){$moreContainer.removeClass('d-md-block d-none');$moreContainer.fadeOut(300)}}})} 21function initAjaxSearch(){let $moreResultsContainer=$('#ajax-search-more-results');let $forumTopicsContainer=$('#ajax-search-forum-topics');if($moreResultsContainer.length>0){let searchTerm=$moreResultsContainer.data('term');let postTypes=$moreResultsContainer.data('post-types');let excludeIds=$moreResultsContainer.data('exclude-ids')||'';$.ajax({url:ajax_object.ajax_url,type:'GET',data:{action:'rt_search_posts',term:searchTerm,post_types:postTypes,exclude_ids:excludeIds},success:function(response){if(response.success){$moreResultsContainer.html(response.data.html)}else{$moreResultsContainer.html('<p class="alert alert-warning">Tyvärr hittades inget resultat. Prova söka igen eller <a href="/forum/">skriv i forumet</a> så hjälper vi dig.</p>')}},error:function(){$moreResultsContainer.html('<p>Error loading more results.</p>')}})} 22if($forumTopicsContainer.length>0){let searchTerm=$forumTopicsContainer.data('term');$.ajax({url:ajax_object.ajax_url,type:'GET',data:{action:'rt_search_forum_topics',term:searchTerm},success:function(response){if(response.success){$forumTopicsContainer.html(response.data.html)}else{$forumTopicsContainer.html('<p>No forum topics found.</p>')}},error:function(){$forumTopicsContainer.html('<p>Error loading forum topics.</p>')}})}} 23filterTags=function(){$('#tagSearchInput').on('keyup',function(){const filter=$(this).val().toLowerCase();$('.tag-group').each(function(){const $group=$(this);let groupHasVisibleTags=!1;$group.find('.tag').each(function(){const $tagItem=$(this);const tagText=$tagItem.text().toLowerCase();if(tagText.includes(filter)){$tagItem.parent().show();groupHasVisibleTags=!0}else{$tagItem.parent().hide()}});if(groupHasVisibleTags){$group.show()}else{$group.hide()}})})} 24function initCardClickable(){$(document).on('click','.card-clickable',function(e){const $target=$(e.target);if($target.is('a, button, input, textarea, select')||$target.closest('a, button, input, textarea, select').length>0){return} 25const link=$(this).find('a').attr('href');if(link){window.location.href=link}})} 26function initRelatedPostsTabs(){$('.rt-related-content .nav-link').on('click',function(e){e.preventDefault();const $clickedTab=$(this);const targetPaneId=$clickedTab.attr('href');$clickedTab.closest('.nav').find('.nav-link').removeClass('active');$clickedTab.addClass('active');const $tabPanes=$clickedTab.closest('.rt-related-content').find('.tab-pane');$tabPanes.removeClass('active');$(targetPaneId).addClass('active')})} 27balanceSubmenuHeights();$(window).on('resize',function(){balanceSubmenuHeights()});function balanceSubmenuHeights(){if($(window).width()<768||$(window).width()>=1400){$('.sub-menu .menu-column .featured-sub-items > li').attr('style','');return} 28$('.sub-menu').each(function(){const $submenu=$(this);const $columns=$submenu.find('.menu-column');$submenu.find('.featured-sub-items > li').css('height','');const maxItems=Math.max(...$columns.map(function(){return $(this).find('.featured-sub-items > li').length}).get());for(let i=0;i<maxItems;i++){let maxHeight=0;const $itemsInRow=[];$columns.each(function(){const $item=$(this).find('.featured-sub-items > li').eq(i);if($item.length){$itemsInRow.push($item);const itemHeight=$item.outerHeight();if(itemHeight>maxHeight){maxHeight=itemHeight}}});if(maxHeight>0){$itemsInRow.forEach($item=>{$item.css('height',maxHeight+'px')})}}})} 29function initFloatTOC(){if($('.toc-block').length==0)return;const $tocBlock=$('.toc-block');let tocHeading=$tocBlock.find('h2').text();let tocList=$tocBlock.find('.toc-wrapper').html();let $floatTOC=$(` 30 <div class="float-toc"> 31 <div class="float-toc-inner"> 32 <div class="toc-wrapper"> 33 ${tocList} 34 </div> 35 <div class="toc-heading"> 36 <h2>${tocHeading}</h2> 37 <a href="#" class="toc-toggle-btn" data-open-label="Visa" data-close-label="Göm">Visa</a> 38 </div> 39 </div> 40 </div> 41 <div class="float-toc-fade"></div> 42 `);$('body').append($floatTOC);$(document).on('click','.float-toc .toc-heading',function(e){e.preventDefault();const $btn=$(this).find('.toc-toggle-btn');const $floatTOCInner=$btn.closest('.float-toc-inner');$floatTOCInner.find('.toc-wrapper, .toc-toggle-btn').toggleClass('open');let isOpen=$floatTOCInner.find('.toc-wrapper').hasClass('open');$btn.text(isOpen?$btn.data('close-label'):$btn.data('open-label'));if(isOpen){$('.float-toc-fade').fadeIn(300)}else{$('.float-toc-fade').fadeOut(300)}});$(document).on('click','.float-toc-fade',function(e){e.preventDefault();const $floatTOCInner=$('.float-toc-inner');$floatTOCInner.find('.toc-wrapper, .toc-toggle-btn').removeClass('open');$('.float-toc .toc-toggle-btn').text($('.float-toc .toc-toggle-btn').data('open-label'));$('.float-toc-fade').fadeOut(300)});let lastScrollTop=0;$(window).on('scroll',function(){const scrollTop=$(this).scrollTop();const $floatTOC=$('.float-toc');const isOpen=$('.float-toc .toc-wrapper').hasClass('open');if(!isOpen){const tocBlockTop=$tocBlock.offset().top;const tocBlockBottom=tocBlockTop+$tocBlock.outerHeight();const hasPassedTocBlock=scrollTop>tocBlockBottom;if(hasPassedTocBlock){if(scrollTop>lastScrollTop){$floatTOC.removeClass('show')}else if(scrollTop<lastScrollTop){$floatTOC.addClass('show')}}else{$floatTOC.removeClass('show')}} 43const windowTop=scrollTop;const windowBottom=scrollTop+$(window).height();
43let firstVisibleSection=null;let minDistance=Infinity;$('.float-toc .toc-wrapper a').each(function(){const href=$(this).attr('href');if(href&&href.startsWith('#')){const $target=$(href);if($target.length){const targetTop=$target.offset().top;if(targetTop>=windowTop&&targetTop<=windowBottom){const distance=targetTop-windowTop;if(distance<minDistance){minDistance=distance;firstVisibleSection=href}}}}});if(!firstVisibleSection){let lastSectionAbove=null;$('.float-toc .toc-wrapper a').each(function(){const href=$(this).attr('href');if(href&&href.startsWith('#')){const $target=$(href);if($target.length){const targetTop=$target.offset().top;if(targetTop<windowTop){lastSectionAbove=href}}}});firstVisibleSection=lastSectionAbove} 44if(firstVisibleSection){$('.float-toc .toc-wrapper li').removeClass('active');$('.float-toc .toc-wrapper a[href="'+firstVisibleSection+'"]').closest('li').addClass('active')} 45lastScrollTop=scrollTop})} 46function initScrollProgressBar(){const $scrollProgress=$('.scroll-progress');if($scrollProgress.length===0)return;const $progressBar=$('.scroll-progress-bar');$(window).on('scroll',function(){const scrollTop=$(window).scrollTop();const docHeight=$(document).height();const winHeight=$(window).height();const scrollPercent=(scrollTop/(docHeight-winHeight))*100;$progressBar.css('width',scrollPercent+'%');if(scrollTop>0){$scrollProgress.addClass('active')}else{$scrollProgress.removeClass('active')}})}})
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.