1(function($){"use strict";$(document).ready(function(){initCourseFinder()});function initCourseFinder(){$(".fx-course-finder-block").each(function(){var $block=$(this);var blockId=$block.attr("id");var courseData=JSON.parse($block.find(".fx-course-data").text());var finder=new CourseFinder($block,courseData);finder.init()})} 2function CourseFinder($block,data){this.$block=$block;this.data=data;this.$overlay=$(".fx-lightbox-overlay");this.$subskillsLightbox=$(".fx-subskills-lightbox");this.$subskillDetailsLightbox=$(".fx-subskill-details-lightbox");this.$courseDetailsLightbox=$(".fx-course-details-lightbox");this.$roleDetailsLightbox=$(".fx-role-details-lightbox");this.currentView="skills";this.currentSkillIndex=null;this.lastOpenedSkill=null;this.subskillDetailsSource=null;this.lastOpenedRole=null;this.lastOpenedCourse=null} 3CourseFinder.prototype.init=function(){this.bindEvents();this.handleHashNavigation()};CourseFinder.prototype.bindEvents=function(){var self=this;this.$block.find(".fx-toggle-btn").on("click",function(){var view=$(this).data("view");self.switchView(view)});this.$block.find(".fx-skills-view .fx-category-btn").on("click",function(){var skillIndex=$(this).data("skill-index");self.showSubskillsLightbox(skillIndex);$(this).addClass("active").siblings().removeClass("active")});this.$block.find(".fx-courses-view .fx-category-btn").on("click",function(){var courseId=$(this).data("course-id");self.showCourseDetailsLightbox(courseId);$(this).addClass("active").siblings().removeClass("active")});this.$block.find(".fx-roles-view .fx-category-btn").on("click",function(){var roleName=$(this).data("role-name");self.showRoleDetailsLightbox(roleName);$(this).addClass("active").siblings().removeClass("active")});this.$courseDetailsLightbox.on("click",".fx-subskill-clickable",function(){var subskillIndex=$(this).data("subskill-index");self.showSubskillDetailsFromCourse(subskillIndex)});this.$courseDetailsLightbox.on("click",".fx-role-clickable",function(){var roleName=$(this).data("role-name");self.showRoleDetailsFromCourse(roleName)});this.$roleDetailsLightbox.on("click",".fx-subskill-clickable",function(){var skillIndex=$(this).data("skill-index");var subskillIndex=$(this).data("subskill-index");if(subskillIndex!==undefined){self.showSubskillDetailsFromRole(subskillIndex)}else if(skillIndex!==undefined){self.showSubskillsLightbox(skillIndex)}});this.$roleDetailsLightbox.on("click",".fx-course-clickable",function(){var courseId=$(this).data("course-id");self.showCourseDetailsFromRole(courseId)});this.$subskillDetailsLightbox.on("click",".fx-course-clickable",function(){var courseId=$(this).data("course-id");self.showCourseDetailsFromSubskill(courseId)});this.$subskillDetailsLightbox.on("click",".fx-role-clickable",function(){var roleName=$(this).data("role-name");self.showRoleDetailsFromSubskill(roleName)});this.$overlay.on("click",".fx-lightbox-close",function(){self.closeLightbox()});this.$subskillDetailsLightbox.on("click",".fx-lightbox-back",function(){self.goBackToSubskills()});this.$subskillDetailsLightbox.on("click",".fx-carousel-prev, .fx-carousel-next",function(){if(!$(this).hasClass("disabled")){var direction=$(this).data("direction");self.navigateSubskill(direction)}});this.$overlay.on("click",function(e){if($(e.target).hasClass("fx-lightbox-overlay")){self.closeLightbox()}});$(document).on("keyup",function(e){if(e.key==="Escape"){self.closeLightbox()}})};CourseFinder.prototype.switchView=function(view,updateHash){this.currentView=view;this.$block.find(".fx-toggle-btn").removeClass("active");this.$block.find('.fx-toggle-btn[data-view="'+view+'"]').addClass("active");this.$block.find(".fx-view").removeClass("active");this.$block.find('.fx-view[data-view="'+view+'"]').addClass("active");if(updateHash!==!1){this.updateHash(view)}};CourseFinder.prototype.handleHashNavigation=function(){var self=this;var hash=window.location.hash.replace("#","");var validViews=["skills","courses","roles"];if(hash&&validViews.indexOf(hash)!==-1){this.switchView(hash,!1);setTimeout(function(){self.scrollToBlock()},100)} 4$(window).on("hashchange",function(){var newHash=window.location.hash.replace("#","");if(newHash&&validViews.indexOf(newHash)!==-1){self.switchView(newHash,!1);self.scrollToBlock()}else if(!newHash){self.switchView("skills",!1)}})};CourseFinder.prototype.updateHash=function(view){if(history.pushState){history.pushState(null,null,"#"+view)}else{window.location.hash=view}};CourseFinder.prototype.scrollToBlock=function(){var blockOffset=this.$block.offset().top;var scrollOffset=blockOffset-100;$("html, body").animate({scrollTop:scrollOffset,},500)};CourseFinder.prototype.showSubskillsLightbox=function(skillIndex){var self=this;this.currentSkillIndex=skillIndex;this.lastOpenedSkill=skillIndex;var skill=this.data.skills.find(function(s){return s.index==skillIndex});if(!skill||!skill.subskills||skill.subskills.length===0){return} 5this.$subskillsLightbox.find(".fx-lightbox-title").text(skill.name);this.$subskillsLightbox.find(".fx-lightbox-subtitle").text(skill.description);var $buttonsContainer=this.$subskillsLightbox.find(".fx-subskills-buttons");$buttonsContainer.empty();
5skill.subskills.forEach(function(subskill,index){var courses=subskill.courses||[];var courseIds=courses.map(function(course){return course.id||course.page_id}).filter(function(id){return id!==null&&id!==undefined});var $btn=$("<button>",{class:"fx-subskill-btn"+(index===0?" active":""),text:subskill.title,"data-subskill-index":subskill.index,"data-course-ids":courseIds.length>0?JSON.stringify(courseIds):"","data-course-count":courses.length,});$btn.on("click",function(){self.subskillDetailsSource="skills";self.showSubskillDetails(subskill);$(this).addClass("active").siblings().removeClass("active")});$buttonsContainer.append($btn)});this.$overlay.fadeIn(300);this.$subskillsLightbox.fadeIn(300)};CourseFinder.prototype.showSubskillDetails=function(subskill,courseIndex){var self=this;this.$subskillsLightbox.hide();this.currentSubskill=subskill;this.currentSubskillIndex=subskill.index;if(typeof courseIndex==="undefined"){courseIndex=0} 6this.currentCourseIndexInSubskill=courseIndex;var $detailContainer=this.$subskillDetailsLightbox.find(".fx-subskill-detail");$detailContainer.empty();this.$subskillDetailsLightbox.find(".fx-carousel-nav").remove();$detailContainer.html('<div class="fx-loading">Loading...</div>');this.$overlay.fadeIn(300);this.$subskillDetailsLightbox.fadeIn(300);if(subskill.courses&&subskill.courses.length>0&&subskill.courses[courseIndex]&&subskill.courses[courseIndex].page_id){var course=subskill.courses[courseIndex];var pageId=course.page_id;var courseUrl=course.url;$.ajax({url:fxCourseFinder.ajaxurl,type:"POST",data:{action:"fx_get_page_data",page_id:pageId,view:"skills",},success:function(response){if(response.success&&response.data){var data=response.data;self.renderSubskillDetails(subskill,data,courseIndex)}else{self.renderSubskillDetailsError(subskill,courseIndex,courseUrl)}},error:function(){self.renderSubskillDetailsError(subskill,courseIndex,courseUrl)},})}else{var courseUrl=subskill.courses&&subskill.courses.length>0?subskill.courses[0].url:null;self.renderSubskillDetailsBasic(subskill,courseIndex,courseUrl)}};CourseFinder.prototype.renderSubskillDetails=function(subskill,data,courseIndex){var self=this;var $detailContainer=this.$subskillDetailsLightbox.find(".fx-subskill-detail");var imageHtml=this.getBackgroundHtml("skills",data.featured_image,data.heading);var coursesHtml='<div class="fx-course-subskills"><h4>Courses to Advance This Skillset:</h4>';if(subskill.courses&&subskill.courses.length>0){coursesHtml+='<div class="fx-subskill-tags">';subskill.courses.forEach(function(course){coursesHtml+='<a class="fx-subskill-tag" href="'+course.url+'" target="_blank">'+self.escapeHtml(course.title)+"</a>"});coursesHtml+="</div>"}else{coursesHtml+='<p class="fx-no-courses">No related courses</p>'} 7coursesHtml+="</div>";var rolesHtml='<div class="fx-course-subskills"><h4>Roles That Leverage This Skillset:</h4>';if(subskill.related_roles&&subskill.related_roles.length>0){rolesHtml+='<div class="fx-subskill-tags">';subskill.related_roles.forEach(function(roleName){rolesHtml+='<span class="fx-subskill-tag fx-role-clickable" data-role-name="'+self.escapeHtml(roleName)+'">'+self.escapeHtml(roleName)+"</span>"});rolesHtml+="</div>"}else{rolesHtml+='<p class="fx-no-courses">No related roles</p>'} 8rolesHtml+="</div>";var ctaHtml="";var ctaUrl=subskill.cta_link;if(ctaUrl){var ctaText="Contact us";ctaHtml='<a href="'+this.escapeHtml(ctaUrl)+'" class="fx-subskill-cta">'+this.escapeHtml(ctaText)+"</a>"} 9var detailHtml=` 10 <div class="fx-subskill-detail-inner"> 11 ${imageHtml} 12 <div class="fx-subskill-info"> 13 <div class="fx-subskill-info-header"> 14 <button class="fx-lightbox-back">←</button> 15 <button class="fx-lightbox-close">×</button> 16 </div> 17 ${ 18 subskill.title 19 ? '<p class="fx-subskill-caption">' + this.escapeHtml(subskill.title) + "</p>" 20 : "" 21 } 22 ${subskill.text ? '<p class="fx-subskill-text">' + this.escapeHtml(subskill.text) + "</p>" : ""} 23 ${rolesHtml} 24 ${coursesHtml} 25 ${ctaHtml} 26 </div> 27 </div> 28 `;$detailContainer.html(detailHtml)};
28CourseFinder.prototype.renderSubskillDetailsBasic=function(subskill,courseIndex,courseUrl){var self=this;var $detailContainer=this.$subskillDetailsLightbox.find(".fx-subskill-detail");var coursesHtml='<div class="fx-course-subskills"><h4>Courses to Advance This Skillset:</h4>';if(subskill.courses&&subskill.courses.length>0){coursesHtml+='<div class="fx-subskill-tags">';subskill.courses.forEach(function(course){coursesHtml+='<a class="fx-subskill-tag" href="'+course.url+'" target="_blank">'+self.escapeHtml(course.title)+"</a>"});coursesHtml+="</div>"}else{coursesHtml+='<p class="fx-no-courses">No related courses</p>'} 29coursesHtml+="</div>";var rolesHtml='<div class="fx-course-subskills"><h4>Roles That Leverage This Skillset:</h4>';if(subskill.related_roles&&subskill.related_roles.length>0){rolesHtml+='<div class="fx-subskill-tags">';subskill.related_roles.forEach(function(roleName){rolesHtml+='<span class="fx-subskill-tag fx-role-clickable" data-role-name="'+self.escapeHtml(roleName)+'">'+self.escapeHtml(roleName)+"</span>"});rolesHtml+="</div>"}else{rolesHtml+='<p class="fx-no-courses">No related roles</p>'} 30rolesHtml+="</div>";var ctaHtml="";var ctaUrl=courseUrl||subskill.cta_link;if(ctaUrl){ctaHtml='<a href="'+this.escapeHtml(ctaUrl)+'" class="fx-subskill-cta">Contact us</a>'} 31var detailHtml=` 32 <div class="fx-subskill-detail-inner"> 33 <div class="fx-subskill-info"> 34 <div class="fx-subskill-info-header"> 35 <button class="fx-lightbox-back">←</button> 36 <button class="fx-lightbox-close">×</button> 37 </div> 38 ${ 39 subskill.title 40 ? '<h3 class="fx-subskill-title">' + this.escapeHtml(subskill.title) + "</h3>" 41 : "" 42 } 43 ${subskill.text ? '<p class="fx-subskill-text">' + this.escapeHtml(subskill.text) + "</p>" : ""} 44 ${ 45 subskill.content 46 ? '<div class="fx-subskill-description">' + this.escapeHtml(subskill.content) + "</div>" 47 : "" 48 } 49 ${coursesHtml} 50 ${rolesHtml} 51 ${ctaHtml} 52 </div> 53 </div> 54 `;$detailContainer.html(detailHtml)};CourseFinder.prototype.renderSubskillDetailsError=function(subskill,courseIndex,courseUrl){var self=this;var $detailContainer=this.$subskillDetailsLightbox.find(".fx-subskill-detail");var coursesHtml='<div class="fx-course-subskills"><h4>Courses to Advance This Skillset:</h4>';if(subskill.courses&&subskill.courses.length>0){coursesHtml+='<div class="fx-subskill-tags">';subskill.courses.forEach(function(course){coursesHtml+='<span class="fx-subskill-tag fx-course-clickable" data-course-id="'+course.id+'">'+self.escapeHtml(course.title)+"</span>"});coursesHtml+="</div>"}else{coursesHtml+='<p class="fx-no-courses">No related courses</p>'} 55coursesHtml+="</div>";var rolesHtml='<div class="fx-course-subskills"><h4>Roles That Leverage This Skillset:</h4>';if(subskill.related_roles&&subskill.related_roles.length>0){rolesHtml+='<div class="fx-subskill-tags">';subskill.related_roles.forEach(function(roleName){rolesHtml+='<span class="fx-subskill-tag fx-role-clickable" data-role-name="'+self.escapeHtml(roleName)+'">'+self.escapeHtml(roleName)+"</span>"});rolesHtml+="</div>"}else{rolesHtml+='<p class="fx-no-courses">No related roles</p>'} 56rolesHtml+="</div>";var ctaHtml="";var ctaUrl=courseUrl||subskill.cta_link;if(ctaUrl){ctaHtml='<a href="'+this.escapeHtml(ctaUrl)+'" class="fx-subskill-cta">Contact us</a>'} 57var detailHtml=` 58 <div class="fx-subskill-detail-inner"> 59 <div class="fx-subskill-info"> 60 <div class="fx-subskill-info-header"> 61 <button class="fx-lightbox-back">←</button> 62 <button class="fx-lightbox-close">×</button> 63 </div> 64 <h3 class="fx-subskill-title">${this.escapeHtml(subskill.title)}</h3> 65 ${subskill.text ? '<p class="fx-subskill-text">' + this.escapeHtml(subskill.text) + "</p>" : ""} 66 <div class="fx-error">Error loading subskill data</div> 67 ${coursesHtml} 68 ${rolesHtml} 69 ${ctaHtml} 70 </div> 71 </div> 72 `;$detailContainer.html(detailHtml)};
72CourseFinder.prototype.addCarouselNavigation=function(subskill,currentCourseIndex){var $detailContainer=this.$subskillDetailsLightbox.find(".fx-subskill-detail");var totalCourses=subskill.courses&&subskill.courses.length?subskill.courses.length:0;console.log("=== CarouselSkills Debug ===",{type:"Courses within Subskill",subskillTitle:subskill.title,totalCourses:totalCourses,currentCourseIndex:currentCourseIndex,displayPosition:currentCourseIndex+1+" / "+totalCourses,});if(totalCourses>1){var prevDisabled=currentCourseIndex<=0?" disabled":"";var nextDisabled=currentCourseIndex>=totalCourses-1?" disabled":"";var $carouselNav=$("<div>",{class:"fx-carousel-nav fx-carousel-skills","data-carousel-type":"skills",});var $prevBtn=$("<button>",{class:"fx-carousel-prev"+prevDisabled,"data-direction":"prev",html:"<span>←</span>",});var $counter=$("<span>",{class:"fx-carousel-counter",text:currentCourseIndex+1+" / "+totalCourses,});var $nextBtn=$("<button>",{class:"fx-carousel-next"+nextDisabled,"data-direction":"next",html:"<span>→</span>",});$carouselNav.append($prevBtn,$counter,$nextBtn);$detailContainer.after($carouselNav);console.log("CarouselSkills: Navigation added successfully - navigating between",totalCourses,"courses")}else{console.log("CarouselSkills: No navigation needed - only",totalCourses,"course(s) mapped to this subskill")}};CourseFinder.prototype.showCourseDetailsLightbox=function(courseId){var self=this;var course=this.data.courses.find(function(c){return c.id==courseId});if(!course){return} 73this.lastOpenedCourse=courseId;var $detailContainer=this.$courseDetailsLightbox.find(".fx-course-detail");$detailContainer.empty();this.$courseDetailsLightbox.find(".fx-carousel-nav").remove();$detailContainer.html('<div class="fx-loading">Loading...</div>');this.$overlay.fadeIn(300);this.$courseDetailsLightbox.fadeIn(300);$.ajax({url:fxCourseFinder.ajaxurl,type:"POST",data:{action:"fx_get_page_data",page_id:course.id,view:"courses",},success:function(response){if(response.success&&response.data){var data=response.data;self.renderCourseDetails(course,data)}else{self.renderCourseDetailsError(course)}},error:function(){self.renderCourseDetailsError(course)},})};CourseFinder.prototype.renderCourseDetails=function(course,data){var self=this;var $detailContainer=this.$courseDetailsLightbox.find(".fx-course-detail");var imageHtml=this.getBackgroundHtml("courses",data.featured_image,data.heading);var relatedSubskills=[];if(data.related_subskills&&data.related_subskills.length>0){relatedSubskills=data.related_subskills}else if(this.data.skills&&this.data.skills.length>0){var courseId=parseInt(course.id,10);this.data.skills.forEach(function(skill){if(skill.subskills&&skill.subskills.length>0){skill.subskills.forEach(function(subskill){if(subskill.courses&&subskill.courses.length>0){subskill.courses.forEach(function(subskillCourse){var subskillCourseId=parseInt(subskillCourse.id||subskillCourse.page_id,10);if(subskillCourseId===courseId){var alreadyAdded=relatedSubskills.some(function(rs){return rs.index===subskill.index});if(!alreadyAdded){relatedSubskills.push({title:subskill.title,index:subskill.index,})}}})}})}})} 74var subskillsHtml="";if(relatedSubskills.length>0){subskillsHtml='<div class="fx-course-subskills"><h4>Skills Learned:</h4><div class="fx-subskill-tags">';relatedSubskills.forEach(function(subskill){subskillsHtml+='<span class="fx-subskill-tag fx-subskill-clickable" data-subskill-index="'+subskill.index+'">'+self.escapeHtml(subskill.title)+"</span>"});subskillsHtml+="</div></div>"} 75var rolesHtml="";if(data.related_roles&&data.related_roles.length>0){rolesHtml='<div class="fx-course-subskills"><h4>Roles That Benefit From This Course:</h4><div class="fx-subskill-tags">';data.related_roles.forEach(function(roleName){rolesHtml+='<span class="fx-subskill-tag fx-role-clickable" data-role-name="'+self.escapeHtml(roleName)+'">'+self.escapeHtml(roleName)+"</span>"});rolesHtml+="</div></div>"} 76var ctaHtml="";if(data.page_url){var ctaText=data.default_cta_text||"Get Started";ctaHtml='<a href="'+this.escapeHtml(data.page_url)+'" class="fx-subskill-cta">'+this.escapeHtml(ctaText)+"</a>"} 77var detailHtml=` 78 <div class="fx-subskill-detail-inner"> 79 ${imageHtml} 80 <div class="fx-subskill-info"> 81 <h3 class="fx-subskill-title">${this.escapeHtml(data.heading)}</h3> 82 ${data.description ? '<div class="fx-subskill-description">' + data.description + "</div>" : ""} 83 ${subskillsHtml} 84 ${rolesHtml} 85 ${ctaHtml} 86 </div> 87 </div> 88 `;$detailContainer.html(detailHtml)};CourseFinder.prototype.renderCourseDetailsError=function(course){var $detailContainer=this.$courseDetailsLightbox.find(".fx-course-detail");var ctaHtml="";if(course.url){ctaHtml='<a href="'+this.escapeHtml(course.url)+'" class="fx-subskill-cta">Get Started</a>'} 89var detailHtml=` 90 <div class="fx-subskill-detail-inner"> 91 <div class="fx-subskill-info"> 92 <h3 class="fx-subskill-title">${this.escapeHtml(course.title)}</h3> 93 <div class="fx-error">Error loading course data</div> 94 ${ctaHtml} 95 </div> 96 </div> 97 `;$detailContainer.html(detailHtml)};CourseFinder.prototype.showRoleDetailsLightbox=function(roleName){var self=this;var role=this.data.roles.find(function(r){return r.name===roleName});if(!role){return} 98this.lastOpenedRole=roleName;var $detailContainer=this.$roleDetailsLightbox.find(".fx-role-detail");$detailContainer.empty();this.$roleDetailsLightbox.find(".fx-carousel-nav").remove();
98var imageHtml=this.getBackgroundHtml("roles",null,role.name);var subskillsHtml="";var detailedSubskillsHtml='<div class="fx-course-subskills"><h4>Skills Critical For This Role:</h4>';if(role.detailed_subskills&&role.detailed_subskills.length>0){detailedSubskillsHtml+='<div class="fx-subskill-tags">';role.detailed_subskills.forEach(function(subskill){detailedSubskillsHtml+='<span class="fx-subskill-tag fx-subskill-clickable" data-subskill-index="'+subskill.index+'">'+self.escapeHtml(subskill.title)+"</span>"});detailedSubskillsHtml+="</div>"}else{detailedSubskillsHtml+='<p class="fx-no-courses">No related sub-skills</p>'} 99detailedSubskillsHtml+="</div>";var coursesHtml='<div class="fx-course-subskills"><h4>Recommended Sales Training Courses For This Role:</h4>';if(role.courses&&role.courses.length>0){coursesHtml+='<div class="fx-subskill-tags">';role.courses.forEach(function(course){coursesHtml+='<a class="fx-subskill-tag" href="'+course.url+'" target="_blank">'+self.escapeHtml(course.title)+"</a>"});coursesHtml+="</div>"}else{coursesHtml+='<p class="fx-no-courses">No related courses</p>'} 100coursesHtml+="</div>";var ctaHtml="";if(role.cta_link){var ctaText="Get Started";ctaHtml='<a href="'+this.escapeHtml(role.cta_link)+'" class="fx-subskill-cta"> Contact us </a>'} 101var detailHtml=` 102 <div class="fx-subskill-detail-inner"> 103 ${imageHtml} 104 <div class="fx-subskill-info"> 105 <h3 class="fx-subskill-title">${this.escapeHtml(role.name)}</h3> 106 ${role.description ? '<div class="fx-subskill-description">' + role.description + "</div>" : ""} 107 ${subskillsHtml} 108 ${detailedSubskillsHtml} 109 ${coursesHtml} 110 ${ctaHtml} 111 </div> 112 </div> 113 `;$detailContainer.html(detailHtml);this.$overlay.fadeIn(300);this.$roleDetailsLightbox.fadeIn(300)};CourseFinder.prototype.showSubskillDetailsFromRole=function(subskillIndex){var subskill=null;var parts=String(subskillIndex).split("_");if(parts.length===2){var skillIndex=parseInt(parts[0],10);var localSubskillIndex=parseInt(parts[1],10);if(this.data.skills[skillIndex]&&this.data.skills[skillIndex].subskills){for(var j=0;j<this.data.skills[skillIndex].subskills.length;j++){if(this.data.skills[skillIndex].subskills[j].index==localSubskillIndex){subskill=this.data.skills[skillIndex].subskills[j];break}}}}else{for(var i=0;i<this.data.skills.length;i++){var skill=this.data.skills[i];for(var j=0;j<skill.subskills.length;j++){if(skill.subskills[j].index==subskillIndex){subskill=skill.subskills[j];break}} 114if(subskill)break}} 115if(!subskill){return} 116this.subskillDetailsSource="role";this.$roleDetailsLightbox.hide();this.showSubskillDetails(subskill)};CourseFinder.prototype.showSubskillDetailsFromCourse=function(subskillIndex){var subskill=null;for(var i=0;i<this.data.skills.length;i++){var skill=this.data.skills[i];for(var j=0;j<skill.subskills.length;j++){if(skill.subskills[j].index==subskillIndex){subskill=skill.subskills[j];break}} 117if(subskill)break} 118if(!subskill){return} 119this.subskillDetailsSource="course";this.$courseDetailsLightbox.hide();this.showSubskillDetails(subskill)};CourseFinder.prototype.showRoleDetailsFromCourse=function(roleName){this.$courseDetailsLightbox.hide();this.showRoleDetailsLightbox(roleName)};CourseFinder.prototype.showCourseDetailsFromRole=function(courseId){this.$roleDetailsLightbox.hide();this.showCourseDetailsLightbox(courseId)};CourseFinder.prototype.showCourseDetailsFromSubskill=function(courseId){this.$subskillDetailsLightbox.hide();this.showCourseDetailsLightbox(courseId)};CourseFinder.prototype.showRoleDetailsFromSubskill=function(roleName){this.$subskillDetailsLightbox.hide();this.showRoleDetailsLightbox(roleName)};CourseFinder.prototype.navigateSubskill=function(direction){var self=this;if(!this.currentSubskill||!this.currentSubskill.courses||this.currentSubskill.courses.length<=1){return} 120var currentCourseIndex=this.currentCourseIndexInSubskill||0;var newCourseIndex;if(direction==="prev"){newCourseIndex=currentCourseIndex-1}else if(direction==="next"){newCourseIndex=currentCourseIndex+1} 121if(newCourseIndex<0||newCourseIndex>=this.currentSubskill.courses.length){return} 122console.log("Navigating to course index",newCourseIndex,"of",this.currentSubskill.courses.length,"courses");this.showSubskillDetails(this.currentSubskill,newCourseIndex)};CourseFinder.prototype.goBackToSubskills=function(){this.$subskillDetailsLightbox.hide();if(this.subskillDetailsSource==="role"&&this.lastOpenedRole){this.showRoleDetailsLightbox(this.lastOpenedRole)}else if(this.subskillDetailsSource==="course"&&this.lastOpenedCourse){this.showCourseDetailsLightbox(this.lastOpenedCourse)}else{this.$subskillsLightbox.fadeIn(300)} 123this.subskillDetailsSource=null};CourseFinder.prototype.closeLightbox=function(){this.$overlay.fadeOut(300);this.$subskillsLightbox.fadeOut(300);this.$subskillDetailsLightbox.fadeOut(300);this.$courseDetailsLightbox.fadeOut(300);this.$roleDetailsLightbox.fadeOut(300)};CourseFinder.prototype.escapeHtml=function(text){if(!text)return"";var map={"&":"&","<":"<",">":">",'"':""","'":"'",};return String(text).replace(/[&<>"']/g,function(m){return map[m]})};
123CourseFinder.prototype.getBackgroundHtml=function(view,featuredImage,altText){var backgroundMode=this.data.backgroundMode||"image";var siteLogo=this.data.siteLogo||"";if(backgroundMode==="gradient"){var gradientColor=this.data.gradientColors&&this.data.gradientColors[view]?this.data.gradientColors[view]:"#0066cc";var rgba=this.hexToRgba(gradientColor,0.35);var gradientStyle="--gradient-color: "+rgba+"; background: linear-gradient(to right, "+rgba+" 0%, rgba(255,255,255,0) 100%);";var html='<div class="fx-subskill-image fx-gradient-background" style="'+gradientStyle+'">';if(siteLogo){html+='<div class="fx-background-logo"><img src="'+this.escapeHtml(siteLogo)+'" alt="Site Logo"></div>'} 124html+="</div>";return html}else{var imageUrl=featuredImage||(this.data.defaultImages&&this.data.defaultImages[view]?this.data.defaultImages[view]:"");if(imageUrl){return('<div class="fx-subskill-image"><img src="'+this.escapeHtml(imageUrl)+'" alt="'+this.escapeHtml(altText)+'"></div>')} 125return""}};CourseFinder.prototype.hexToRgba=function(hex,opacity){hex=hex.replace("#","");var r=parseInt(hex.substring(0,2),16);var g=parseInt(hex.substring(2,4),16);var b=parseInt(hex.substring(4,6),16);return"rgba("+r+", "+g+", "+b+", "+opacity+")"}})(jQuery)
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.