{"version":3,"file":"background_element.min.js","sources":["https:\/\/moodle.sonsbeekmedia.nl\/caie_39\/mod\/teachingtools\/amd\/src\/names\/background_element.js"],"sourcesContent":["\/\/ This file is part of Moodle - http:\/\/moodle.org\/\n\/\/\n\/\/ Moodle is free software: you can redistribute it and\/or modify\n\/\/ it under the terms of the GNU General Public License as published by\n\/\/ the Free Software Foundation, either version 3 of the License, or\n\/\/ (at your option) any later version.\n\/\/\n\/\/ Moodle is distributed in the hope that it will be useful,\n\/\/ but WITHOUT ANY WARRANTY; without even the implied warranty of\n\/\/ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\/\/ GNU General Public License for more details.\n\/\/\n\/\/ You should have received a copy of the GNU General Public License\n\/\/ along with Moodle. If not, see .\n\n\/**\n * Manage the background element.\n *\n * @module mod_teachingtools\/names\/background_element\n * @class BackgroundElement\n * @copyright 2023 Sonsbeekmedia\n * @author Bas Brands \n * @license http:\/\/www.gnu.org\/copyleft\/gpl.html GNU GPL v3 or later\n *\/\n\nimport {get_string as getString} from 'core\/str';\nimport Notification from 'core\/notification';\nimport StoreConfigElement from 'mod_teachingtools\/names\/store_config_element';\nexport default class BackGroundElement {\n rootElement;\n drawZone;\n names;\n storagename;\n\n constructor(names, rootElement) {\n this.rootElement = rootElement;\n this.drawZone = this.rootElement.querySelector('.actionarea');\n this.previewImage = this.rootElement.querySelector('[data-region=\"background-preview\"]');\n this.removeButton = this.rootElement.querySelector('[data-action=\"remove-background\"]');\n this.names = names;\n this.storeConfig = new StoreConfigElement(names, rootElement);\n this.addEventListeners();\n this.setStoredBackground();\n }\n\n updateRemoveButton() {\n if (!this.removeButton) {\n return;\n }\n if (this.previewImage.dataset.hascustom == 1) {\n this.removeButton.classList.remove('d-none');\n this.previewImage.classList.remove('d-none');\n } else {\n this.removeButton.classList.add('d-none');\n this.previewImage.classList.add('d-none');\n }\n }\n\n \/**\n * Set the stored background image.\n * @returns {Promise}\n *\/\n async setStoredBackground() {\n const localImage = await this.storeConfig.getCustomData('backgroundimage');\n if (localImage && this.previewImage) {\n let img = document.createElement('img');\n img.setAttribute('src', localImage);\n img.addEventListener('load', () => {\n this.previewImage.style.backgroundImage = 'url(' + localImage + ')';\n this.previewImage.dataset.hascustom = 1;\n this.rootElement.dataset.hascustom = 1;\n this.drawZone.style.backgroundImage = 'url(' + localImage + ')';\n this.updateRemoveButton();\n });\n return true;\n }\n return false;\n }\n\n addEventListeners() {\n const uploadButton = document.querySelector('[data-action=\"uploadimage\"]');\n if (uploadButton) {\n uploadButton.addEventListener('change', e => {\n this.imageUploader(e);\n e.preventDefault();\n });\n }\n if (this.removeButton) {\n this.removeButton.addEventListener('click', (e) => {\n e.preventDefault();\n this.removeButtonAction();\n });\n }\n }\n\n removeButtonAction() {\n if (this.removeButton) {\n this.drawZone.style.backgroundImage = 'url(' + this.removeButton.dataset.originalbg + ')';\n this.previewImage.style.backgroundImage = 'url(' + this.removeButton.dataset.originalbg + ')';\n this.previewImage.dataset.hascustom = 0;\n this.rootElement.dataset.hascustom = 0;\n this.storeConfig.setCustomData('backgroundimage', null);\n this.updateRemoveButton();\n }\n }\n\n imageUploader(e) {\n let file = e.target.files[0];\n \/\/ Max Bytes 5MB\n const siteMaxBytes = 5242880;\n\n \/\/ Only process image files.\n if (!file.type.match('image.*')) {\n return;\n }\n\n if (file.size > siteMaxBytes) {\n const maxbytesstr = {\n size: '5MB',\n file: file.name\n };\n getString('maxbytesfile', 'error', maxbytesstr).done(message => {\n Notification.alert('', message);\n });\n return;\n }\n const reader = new FileReader();\n reader.onload = (() => {\n let filedata = reader.result;\n let img = document.createElement('img');\n img.setAttribute('src', filedata);\n img.addEventListener('load', () => {\n this.drawZone.style.backgroundImage = 'url(' + filedata + ')';\n this.storeConfig.setCustomData('backgroundimage', filedata);\n this.previewImage.style.backgroundImage = 'url(' + filedata + ')';\n this.previewImage.dataset.hascustom = 1;\n this.rootElement.dataset.hascustom = 1;\n this.updateRemoveButton();\n });\n\n });\n \/\/ Read in the image file as a data URL.\n reader.readAsDataURL(file);\n }\n}"],"names":["constructor","names","rootElement","drawZone","this","querySelector","previewImage","removeButton","storeConfig","StoreConfigElement","addEventListeners","setStoredBackground","updateRemoveButton","dataset","hascustom","classList","remove","add","localImage","getCustomData","img","document","createElement","setAttribute","addEventListener","style","backgroundImage","uploadButton","e","imageUploader","preventDefault","removeButtonAction","originalbg","setCustomData","file","target","files","type","match","size","maxbytesstr","name","done","message","alert","reader","FileReader","onload","filedata","result","readAsDataURL"],"mappings":"uqBAkCIA,YAAYC,MAAOC,qLACVA,YAAcA,iBACdC,SAAWC,KAAKF,YAAYG,cAAc,oBAC1CC,aAAeF,KAAKF,YAAYG,cAAc,2CAC9CE,aAAeH,KAAKF,YAAYG,cAAc,0CAC9CJ,MAAQA,WACRO,YAAc,IAAIC,8BAAmBR,MAAOC,kBAC5CQ,yBACAC,sBAGTC,qBACSR,KAAKG,eAGiC,GAAvCH,KAAKE,aAAaO,QAAQC,gBACrBP,aAAaQ,UAAUC,OAAO,eAC9BV,aAAaS,UAAUC,OAAO,iBAE9BT,aAAaQ,UAAUE,IAAI,eAC3BX,aAAaS,UAAUE,IAAI,8CAS9BC,iBAAmBd,KAAKI,YAAYW,cAAc,sBACpDD,YAAcd,KAAKE,aAAc,KAC7Bc,IAAMC,SAASC,cAAc,cACjCF,IAAIG,aAAa,MAAOL,YACxBE,IAAII,iBAAiB,QAAQ,UACpBlB,aAAamB,MAAMC,gBAAkB,OAASR,WAAa,SAC3DZ,aAAaO,QAAQC,UAAY,OACjCZ,YAAYW,QAAQC,UAAY,OAChCX,SAASsB,MAAMC,gBAAkB,OAASR,WAAa,SACvDN,yBAEF,SAEJ,EAGXF,0BACUiB,aAAeN,SAAShB,cAAc,+BACxCsB,cACAA,aAAaH,iBAAiB,UAAUI,SAC\/BC,cAAcD,GACnBA,EAAEE,oBAGN1B,KAAKG,mBACAA,aAAaiB,iBAAiB,SAAUI,IACzCA,EAAEE,sBACGC,wBAKjBA,qBACQ3B,KAAKG,oBACAJ,SAASsB,MAAMC,gBAAkB,OAAStB,KAAKG,aAAaM,QAAQmB,WAAa,SACjF1B,aAAamB,MAAMC,gBAAkB,OAAStB,KAAKG,aAAaM,QAAQmB,WAAa,SACrF1B,aAAaO,QAAQC,UAAY,OACjCZ,YAAYW,QAAQC,UAAY,OAChCN,YAAYyB,cAAc,kBAAmB,WAC7CrB,sBAIbiB,cAAcD,OACNM,KAAON,EAAEO,OAAOC,MAAM,OAKrBF,KAAKG,KAAKC,MAAM,qBAIjBJ,KAAKK,KAPY,QAOS,OACpBC,YAAc,CAChBD,KAAM,MACNL,KAAMA,KAAKO,qCAEL,eAAgB,QAASD,aAAaE,MAAKC,gCACpCC,MAAM,GAAID,kBAIzBE,OAAS,IAAIC,WACnBD,OAAOE,OAAU,SACTC,SAAWH,OAAOI,OAClB7B,IAAMC,SAASC,cAAc,OACjCF,IAAIG,aAAa,MAAOyB,UACxB5B,IAAII,iBAAiB,QAAQ,UACpBrB,SAASsB,MAAMC,gBAAkB,OAASsB,SAAW,SACrDxC,YAAYyB,cAAc,kBAAmBe,eAC7C1C,aAAamB,MAAMC,gBAAkB,OAASsB,SAAW,SACzD1C,aAAaO,QAAQC,UAAY,OACjCZ,YAAYW,QAAQC,UAAY,OAChCF,yBAKbiC,OAAOK,cAAchB"}