{"version":3,"file":"user-menu-banner.min.js","sources":["https:\/\/www.feeacademy.global\/theme\/norse\/amd\/src\/user-menu-banner.js"],"sourcesContent":["import $ from 'jquery';\nimport {setUserPreference, getUserPreference} from 'core_user\/repository';\nimport * as Notification from 'core\/notification';\n\nconst SELECTORS = {\n userBanner: '#user-action-menu .usermenu-banner',\n userBannerModal: '#user-banner-modal',\n userBannerModalBody: '#user-banner-modal .modal-body',\n userBannerModalImages: '#user-banner-modal .modal-body img',\n userBannerModalSelectedImage: '#user-banner-modal .modal-body .selected',\n userBannerModalSaveButton: '#user-banner-modal .modal-footer .btn-primary'\n};\n\nconst fetchData = async (url) => {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('Usermenu banner network response was not ok.');\n }\n return response.json();\n};\n\nconst getImagesAndPopulateModal = async () => {\n try {\n const imageGroups = await fetchData(`${M.cfg.wwwroot}\/theme\/norse\/ajax\/get_usermenu_background_images.php`);\n const savedImageFileName = await fetchUserBackgroundChoice();\n\n let html = '';\n for (const [category, images] of Object.entries(imageGroups)) {\n html += `
${category}<\/h6>`;\n html += images.map(imageUrl => {\n const isSelected = savedImageFileName && getFileNameFromPath(imageUrl) === savedImageFileName ? 'selected' : '';\n return `\"Background`;\n }).join('');\n }\n\n $(SELECTORS.userBannerModalBody).html(html);\n } catch (error) {\n console.error('Error populating modal:', error);\n }\n};\n\nconst getSelectedImage = () => {\n const selectedImage = document.querySelector(SELECTORS.userBannerModalSelectedImage);\n return selectedImage ? selectedImage.getAttribute('data-image-path') : null;\n};\n\nconst setBannerImage = (imagePath) => {\n document.querySelector(SELECTORS.userBanner).style.backgroundImage = `url(\"${imagePath}\")`;\n};\n\nconst getFileNameFromPath = (path) => {\n const lastIndex = path.lastIndexOf('\/');\n return path.substring(lastIndex + 1);\n};\n\nconst fetchUserBackgroundChoice = async () => {\n try {\n const savedImageFileName = await getUserPreference('usermenu_background_preference');\n return savedImageFileName || null;\n } catch (error) {\n console.error('Error fetching user preference:', error);\n return null;\n }\n};\n\nconst saveUserBackgroundChoice = (imagePath) => {\n const imageFileName = getFileNameFromPath(imagePath);\n return setUserPreference('usermenu_background_preference', imageFileName)\n .catch(Notification.exception);\n};\n\nconst handleImageSelection = (selectedImage) => {\n if (selectedImage.classList.contains('selected')) {\n selectedImage.classList.remove('selected');\n } else {\n const allImages = document.querySelectorAll(SELECTORS.userBannerModalImages);\n allImages.forEach(image => image.classList.remove('selected'));\n selectedImage.classList.add('selected');\n }\n};\n\nconst handleSaveImage = () => {\n const selectedImage = getSelectedImage();\n if (selectedImage) {\n setBannerImage(selectedImage);\n saveUserBackgroundChoice(selectedImage);\n } else {\n setUserPreference('usermenu_background_preference', '')\n .catch(Notification.exception)\n .finally(() => {\n location.reload();\n });\n\n }\n $(SELECTORS.userBannerModal).modal('hide');\n};\n\nconst registerEventListeners = () => {\n $(SELECTORS.userBannerModal).on('show.bs.modal', async function() {\n await getImagesAndPopulateModal();\n });\n\n document.querySelector(SELECTORS.userBannerModal).addEventListener('click', (event) => {\n if (event.target.classList.contains('selectable')) {\n handleImageSelection(event.target);\n }\n });\n\n document.querySelector(SELECTORS.userBannerModalSaveButton).addEventListener('click', async () => {\n handleSaveImage();\n });\n};\n\nconst init = () => {\n registerEventListeners();\n};\n\nexport default {\n init: init,\n};"],"names":["SELECTORS","getImagesAndPopulateModal","async","imageGroups","response","fetch","url","ok","Error","json","fetchData","M","cfg","wwwroot","savedImageFileName","fetchUserBackgroundChoice","html","category","images","Object","entries","map","imageUrl","isSelected","getFileNameFromPath","join","error","console","path","lastIndex","lastIndexOf","substring","handleSaveImage","selectedImage","document","querySelector","getAttribute","getSelectedImage","imagePath","style","backgroundImage","imageFileName","catch","Notification","exception","saveUserBackgroundChoice","finally","location","reload","modal","registerEventListeners","on","addEventListener","event","target","classList","contains","remove","querySelectorAll","forEach","image","add","init"],"mappings":"4uCAIMA,qBACU,qCADVA,0BAEe,qBAFfA,8BAGmB,iCAHnBA,gCAIqB,qCAJrBA,uCAK4B,2CAL5BA,oCAMyB,gDAWzBC,0BAA4BC,oBAEpBC,iBAVID,OAAAA,YACRE,eAAiBC,MAAMC,SACxBF,SAASG,SACJ,IAAIC,MAAM,uDAEbJ,SAASK,QAKcC,WAAaC,EAAEC,IAAIC,iEACvCC,yBAA2BC,gCAE7BC,KAAO,OACN,MAAOC,SAAUC,UAAWC,OAAOC,QAAQjB,aAC5Ca,oCAA+BC,kBAC\/BD,MAAQE,OAAOG,KAAIC,iBACTC,WAAaT,oBAAsBU,oBAAoBF,YAAcR,mBAAqB,WAAa,6BACzFQ,wCAA+BC,yCAAgCD,mEACpFG,KAAK,wBAGVzB,+BAA+BgB,KAAKA,MACxC,MAAOU,OACLC,QAAQD,MAAM,0BAA2BA,SAa3CF,oBAAuBI,aACnBC,UAAYD,KAAKE,YAAY,YAC5BF,KAAKG,UAAUF,UAAY,IAGhCd,0BAA4Bb,2BAEO,iCAAkB,mCACtB,KAC\/B,MAAOwB,cACLC,QAAQD,MAAM,kCAAmCA,OAC1C,OAoBTM,gBAAkB,WACdC,cAzCe,YACfA,cAAgBC,SAASC,cAAcnC,+CACtCiC,cAAgBA,cAAcG,aAAa,mBAAqB,MAuCjDC,GApCFC,IAAAA,UAqChBL,eArCgBK,UAsCDL,cArCnBC,SAASC,cAAcnC,sBAAsBuC,MAAMC,+BAA0BF,gBAkB\/CA,CAAAA,kBACxBG,cAAgBjB,oBAAoBc,YACnC,iCAAkB,iCAAkCG,eACtDC,MAAMC,aAAaC,YAiBpBC,CAAyBZ,kDAEP,iCAAkC,IACjDS,MAAMC,aAAaC,WACnBE,SAAQ,KACLC,SAASC,gCAIjBhD,2BAA2BiD,MAAM,SAGjCC,uBAAyB,yBACzBlD,2BAA2BmD,GAAG,iBAAiBjD,uBACvCD,+BAGViC,SAASC,cAAcnC,2BAA2BoD,iBAAiB,SAAUC,QA\/BnDpB,IAAAA,cAgClBoB,MAAMC,OAAOC,UAAUC,SAAS,iBAhCdvB,cAiCGoB,MAAMC,QAhCjBC,UAAUC,SAAS,YACjCvB,cAAcsB,UAAUE,OAAO,aAEbvB,SAASwB,iBAAiB1D,iCAClC2D,SAAQC,OAASA,MAAML,UAAUE,OAAO,cAClDxB,cAAcsB,UAAUM,IAAI,iBA+BhC3B,SAASC,cAAcnC,qCAAqCoD,iBAAiB,SAASlD,UAClF8B,mCAQO,CACX8B,KALS,KACTZ"}