{"version":3,"sources":["components/AppBackground/background.jpg","components/AppBackground/background-laser.jpg","components/ShareButtons/whatsapp.svg","components/ShareButtons/facebook.svg","components/ShareButtons/twitter.svg","components/WordArt.js","audioFiles.js","playAudio.js","useStateWithLocalStorage.js","components/SoundBoardButton.js","components/TextBlock.js","components/SoundBoard.js","components/IsHetBierTijd.js","components/YoutubeIFrame.js","components/AppBackground/AppBackground.js","components/ShareButtons/ShareButtons.js","components/PreloadAudio.js","App.js","serviceWorker.js","index.js"],"names":["module","exports","WordArt","props","className","style","overflow","data-content","text","paddingBottom","originalAudioFiles","fileName","title","mandAudioFiles","startNewButtonColor","mashupAudioFiles","audioFiles","name","files","subDir","forEach","audioSet","file","src","replace","currentHowl","playAudio","playOverlapping","stop","Howl","play","preloadAllAudio","progressCallBack","totalCount","flatMap","length","progress","loadedCount","errors","onLoad","onLoadError","id","error","console","log","push","onload","onloaderror","preloadAudio","useStateWithLocalStorage","localStorageKey","defaultValue","React","useState","store","get","value","setValue","useEffect","set","SoundBoardButton","showClickCount","clickCount","setClickCount","btnStyle","onClick","handleClick","TextBlock","TagName","tag","extraProps","children","buttonStyles","getButtonStyle","index","SoundBoard","history","setHistory","total","setTotal","handleButtonClick","audioFile","concat","historyReversedCopy","slice","reverse","createNormalButtons","map","key","Tabs","defaultActiveKey","variant","Tab","eventKey","disabled","mandButtonStyleIndex","getMandButtonStyle","createMandButtons","marginTop","IsHetBierTijd","lastPlayedTitle","setLastPlayedTitle","randomItem","Math","floor","random","fontSize","YoutubeIFrame","embedId","startAt","marginBottom","width","height","frameBorder","allow","allowFullScreen","AppBackground","display","backgroundImg","alt","backgroundLaserImg","useLaser","buttons","logo","whatsappLogo","url","encodeURI","window","location","href","facebookLogo","twitterLogo","ShareButtons","button","target","PreloadAudio","show","setShow","setProgress","handleClose","preloadProgressCallback","getIsLoaded","setTimeout","Modal","onHide","centered","Header","closeButton","Title","Body","Spinner","animation","ProgressBar","now","max","Footer","Button","App","bgUseLaser","setBgUserLaser","onPointerDown","e","event","pointerType","onPointerUp","maxWidth","marginLeft","marginRight","rel","Boolean","hostname","match","ReactDOM","render","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/main.4071e424.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/background.9ac07b88.jpg\";","module.exports = __webpack_public_path__ + \"static/media/background-laser.310d8c0f.jpg\";","module.exports = __webpack_public_path__ + \"static/media/whatsapp.1c472081.svg\";","module.exports = __webpack_public_path__ + \"static/media/facebook.f8b97394.svg\";","module.exports = __webpack_public_path__ + \"static/media/twitter.b308fa8b.svg\";","import React from 'react';\r\nimport './Wordart.scss';\r\n\r\nexport function WordArt(props) {\r\n return (
\r\n
\r\n {/* need to put text in data-content for shadow style (:fbefore element) */}\r\n

\r\n {props.text}\r\n

\r\n
\r\n
);\r\n}\r\n","\r\nexport const audioBasePath = process.env.PUBLIC_URL + \"/assets/audio/\";\r\n\r\nexport const originalAudioFiles = [\r\n { fileName: \"5 euro's.. Op je muil, gauw!.mp3\", title: \"5 euro's.. Op je muil, gauw!\" }\r\n , { fileName: \"Allemaal loze putten.mp3\", title: \"Allemaal loze putten\" }\r\n , { fileName: \"Allemaal vuilniszakken.mp3\", title: \"Allemaal vuilniszakken\" }\r\n , { fileName: \"Als je nou je herses gebruik.mp3\", title: \"Als je nou je herses gebruik\" }\r\n , { fileName: \"Als je nou opgepas had.mp3\", title: \"Als je nou opgepas had\" }\r\n , { fileName: \"Begodverredomd van huurders.mp3\", title: \"Begodverredomd van huurders\" }\r\n , { fileName: \"Can you hear me.mp3\", title: \"Can you hear me\" }\r\n , { fileName: \"Dan gaat u der achtermekaar uit.mp3\", title: \"Dan gaat u der achtermekaar uit\" }\r\n , { fileName: \"Dan ken je alleen geen biertje kopuuh.mp3\", title: \"Dan ken je alleen geen biertje kopuuh\" }\r\n , { fileName: \"Dat is je huisbaas, die vraagt om z'n centen.mp3\", title: \"Dat is je huisbaas, die vraagt om z'n centen\" }\r\n , { fileName: \"Dat is wel mooi natuurlijk.mp3\", title: \"Dat is wel mooi natuurlijk\" }\r\n , { fileName: \"Dat komt niet uit met hem.mp3\", title: \"Dat komt niet uit met hem\" }\r\n , { fileName: \"Denkt erom hoor, dat ik er 1 ben.mp3\", title: \"Denkt erom hoor, dat ik er 1 ben\" }\r\n , { fileName: \"Die heb niks meer joh.mp3\", title: \"Die heb niks meer joh\" }\r\n , { fileName: \"Die man stink.mp3\", title: \"Die man stink\" }\r\n , { fileName: \"Dááágg.mp3\", title: \"Dááágg\" }\r\n// , { fileName: \"Deze bestaat niet.mp3\", title: \"TEST (werkt niet)\" }\r\n , { fileName: \"Elke zweetneus van je sokken....mp3\", title: \"Elke zweetneus van je sokken...\" }\r\n , { fileName: \"En jij krijg ook een tik op je reetos, wha ha ha hááá.mp3\", title: \"En jij krijg ook een tik op je reetos, wha ha ha hááá\" }\r\n , { fileName: \"Geef eens antwoord.mp3\", title: \"Geef eens antwoord\" }\r\n , { fileName: \"Gha ha ha ha.mp3\", title: \"Gha ha ha ha\" }\r\n , { fileName: \"Hoe is het met die paarduuh, hoeveel ga je er kopuuh.mp3\", title: \"Hoe is het met die paarduuh, hoeveel ga je er kopuuh\" }\r\n , { fileName: \"I'll be back.mp3\", title: \"I'll be back\" }\r\n , { fileName: \"Iedereen moet betalen...iedereen.mp3\", title: \"Iedereen moet betalen...iedereen\" }\r\n , { fileName: \"Ik kom wel terug hoooor.mp3\", title: \"Ik kom wel terug hoooor\" }\r\n , { fileName: \"Ja, Ja, Ja, wel waar Jos.mp3\", title: \"Ja, Ja, Ja, wel waar Jos\" }\r\n , { fileName: \"Jaa, dan is het weer haast een maand om héé.mp3\", title: \"Jaa, dan is het weer haast een maand om héé\" }\r\n , { fileName: \"Je heb altijd een grote muil gehad.mp3\", title: \"Je heb altijd een grote muil gehad\" }\r\n , { fileName: \"Je heb een stuk in je broek.mp3\", title: \"Je heb een stuk in je broek\" }\r\n , { fileName: \"Je heb geen gulden hoe ken je nou koopuuh.mp3\", title: \"Je heb geen gulden hoe ken je nou koopuuh\" }\r\n , { fileName: \"Je heb nooit geen geld, kankerboef.mp3\", title: \"Je heb nooit geen geld, kankerboef\" }\r\n , { fileName: \"Je loop meer als werken.mp3\", title: \"Je loop meer als werken\" }\r\n , { fileName: \"Je moet gewoon kijken, hoe de baas het doet hééé.mp3\", title: \"Je moet gewoon kijken, hoe de baas het doet hééé\" }\r\n , { fileName: \"Je moet niet denken dat we dag en nacht.....mp3\", title: \"Je moet niet denken dat we dag en nacht....\" }\r\n , { fileName: \"Je neem me nog in de maling voor die 200euro.mp3\", title: \"Je neem me nog in de maling voor die 200euro\" }\r\n , { fileName: \"Jos, waarom ben je eruit getrapt.mp3\", title: \"Jos, waarom ben je eruit getrapt\" }\r\n , { fileName: \"Kijk mooi weer spelen ken iedereen wel.mp3\", title: \"Kijk mooi weer spelen ken iedereen wel\" }\r\n , { fileName: \"Kijk, je moet je eigen anpassen.mp3\", title: \"Kijk, je moet je eigen anpassen\" }\r\n , { fileName: \"Laat maar komme, gelijk een nik op z'n lijer, ha ha ha ha.mp3\", title: \"Laat maar komme, gelijk een nik op z'n lijer, ha ha ha ha\" }\r\n , { fileName: \"Normaal doen hoor.mp3\", title: \"Normaal doen hoor\" }\r\n , { fileName: \"Nou weet je wat werken is.mp3\", title: \"Nou weet je wat werken is\" }\r\n , { fileName: \"Opkankeren en van m'n zakken uitblijven.mp3\", title: \"Opkankeren en van m'n zakken uitblijven\" }\r\n , { fileName: \"Optieffuhh, gauw!.mp3\", title: \"Optieffuhh, gauw!\" }\r\n , { fileName: \"Tony, wie is Tony.mp3\", title: \"Tony, wie is Tony\" }\r\n , { fileName: \"Tyyffusshoerr.mp3\", title: \"Tyyffusshoerr\" }\r\n , { fileName: \"U ken doorgaan.mp3\", title: \"U ken doorgaan\" }\r\n , { fileName: \"Vieze tyfuslijeerr.mp3\", title: \"Vieze tyfuslijeerr\" }\r\n , { fileName: \"Waar zijn die andere 300 dan.mp3\", title: \"Waar zijn die andere 300 dan\" }\r\n , { fileName: \"We hebben geen tyfus aan die zwerver joh.mp3\", title: \"We hebben geen tyfus aan die zwerver joh\" }\r\n , { fileName: \"We zijn net de soos, kinderen van de soos.mp3\", title: \"We zijn net de soos, kinderen van de soos\" }\r\n , { fileName: \"Ze kennen netjes vragen om volgende maand te betalen.mp3\", title: \"Ze kennen netjes vragen om volgende maand te betalen\" }\r\n , { fileName: \"Zie je, dit zijn allemaal stenen hééé.mp3\", title: \"Zie je, dit zijn allemaal stenen hééé\" }\r\n];\r\n\r\nexport const mandAudioFiles = [\r\n { fileName: \"Ben je eruit.mp3\"}\r\n , { fileName: \"Dronken.mp3\"}\r\n , { fileName: \"Een (lidwoord).mp3\", title: \"Een ('n)\"}\r\n , { fileName: \"En zo is het.mp3\"}\r\n , { fileName: \"Euro.mp3\"}\r\n , { fileName: \"Geef is antwoord.mp3\"}\r\n , { fileName: \"Gehad.mp3\"}\r\n , { fileName: \"Gewoon.mp3\", startNewButtonColor: true}\r\n , { fileName: \"Had je gewoon.mp3\"}\r\n , { fileName: \"Had je.mp3\"}\r\n , { fileName: \"Had.mp3\"}\r\n , { fileName: \"HE.mp3\", startNewButtonColor: true}\r\n , { fileName: \"hee 2.mp3\"}\r\n , { fileName: \"Hee 3.mp3\"}\r\n , { fileName: \"hee 4.mp3\"}\r\n , { fileName: \"Hee 5.mp3\"}\r\n , { fileName: \"HeEe.mp3\"}\r\n , { fileName: \"heeeeh.mp3\"}\r\n , { fileName: \"heeh.mp3\"}\r\n , { fileName: \"Heh.mp3\"}\r\n , { fileName: \"hehh.mp3\"}\r\n , { fileName: \"hkeh.mp3\"}\r\n , { fileName: \"Hueh.mp3\"}\r\n , { fileName: \"Jaaaaaaaa.mp3\", startNewButtonColor: true}\r\n , { fileName: \"Je.mp3\"}\r\n , { fileName: \"Kamer.mp3\"}\r\n , { fileName: \"Kopeeeh.mp3\"}\r\n , { fileName: \"Krijg iedereen.mp3\"}\r\n , { fileName: \"Kijk.mp3\", startNewButtonColor: true}\r\n , { fileName: \"Maar kijk.mp3\"}\r\n , { fileName: \"Neus.mp3\", startNewButtonColor: true}\r\n , { fileName: \"Oke.mp3\"}\r\n , { fileName: \"paardeh.mp3\"}\r\n , { fileName: \"tachtig.mp3\"}\r\n , { fileName: \"Toniiiiieeeeh.mp3\"}\r\n , { fileName: \"Uit.mp3\"}\r\n]\r\n\r\nexport const mashupAudioFiles = [\r\n { fileName: \"Als huisbaas zijnde.mp3\"}\r\n , { fileName: \"Bob de huisbaas.mp3\"}\r\n , { fileName: \"eeeeeeeehhhhhhhhh.mp3\"}\r\n , { fileName: \"HEhehehe.mp3\"}\r\n , { fileName: \"Jaaaa je euro krijg iedereen en zo is het ok.mp3\"}\r\n , { fileName: \"Jaaaaa ok kijk je uit.mp3\"}\r\n , { fileName: \"Kijk je 80 euro krijg iedereen.mp3\"}\r\n , { fileName: \"Kijk je neus krijg iedereen.mp3\"}\r\n , { fileName: \"Kijk je neus.mp3\"}\r\n]\r\n\r\nconst audioFiles = [\r\n {\r\n name: \"Standaard\",\r\n files: originalAudioFiles,\r\n subDir: \"standaard/\"\r\n },\r\n {\r\n name: \"Mand\",\r\n files: mandAudioFiles,\r\n subDir: \"mand/\"\r\n }, {\r\n name: \"Mashup\",\r\n files: mashupAudioFiles,\r\n subDir: \"mashup/\"\r\n },\r\n];\r\n\r\naudioFiles.forEach(audioSet => {\r\n audioSet.files.forEach(file => {\r\n file.src = audioBasePath + (audioSet.subDir || \"\") + file.fileName;\r\n if (!file.title) {\r\n file.title = file.fileName.replace('.mp3', '');\r\n }\r\n });\r\n});\r\n\r\nexport default audioFiles;","import { Howl } from 'howler';\r\nimport audioFiles from './audioFiles'\r\n\r\nvar currentHowl = null;\r\n\r\nconst playAudio = (src, playOverlapping) => {\r\n // playOverlapping is more fun for the short mand clips :)\r\n if (!playOverlapping && currentHowl != null) {\r\n currentHowl.stop();\r\n }\r\n currentHowl = new Howl({\r\n src: [src]\r\n });\r\n currentHowl.play();\r\n};\r\n\r\nexport default playAudio;\r\n\r\n\r\nexport function preloadAudio(src, onLoad, onLoadError) {\r\n new Howl({\r\n src: [src],\r\n // Fires when the sound is loaded.\r\n onload: () => onLoad(src),\r\n // Fires when the sound is unable to load. The first parameter is the ID of the sound (if it exists) and the second is the error message/code.\r\n onloaderror: (id, error) => onLoadError(src, id, error)\r\n });\r\n}\r\nexport function preloadAllAudio(progressCallBack) {\r\n const totalCount = audioFiles.flatMap(audioSet => audioSet.files).length;\r\n //console.log(totalCount + \"files\");\r\n\r\n let progress = {\r\n loadedCount: 0,\r\n totalCount: totalCount,\r\n errors: []\r\n }\r\n progress.getIsLoaded = () => progress.loadedCount >= totalCount;\r\n progress.getProgressPct = () => progress.loadedCount / totalCount;\r\n\r\n const onLoad = function(src){\r\n //console.log(`onLoad: '${src}'`);\r\n progress.loadedCount += 1;\r\n progressCallBack(progress);\r\n }\r\n const onLoadError = function(src, id, error){\r\n console.log(`onLoadError: '${src}' = ${id} --> ${error}`);\r\n progress.loadedCount += 1;\r\n progress.errors.push(`${src}: ${error}`);\r\n progressCallBack(progress);\r\n }\r\n progressCallBack(progress);\r\n\r\n audioFiles.forEach(audioSet => {\r\n audioSet.files.forEach(file => {\r\n preloadAudio(file.src, onLoad, onLoadError)\r\n });\r\n });\r\n}\r\n","import React from 'react';\r\nimport store from 'store';\r\n\r\n// combination of https://www.robinwieruch.de/local-storage-react and https://github.com/marcuswestin/store.js/\r\nexport default function useStateWithLocalStorage(localStorageKey, defaultValue) {\r\n const [value, setValue] = React.useState(\r\n store.get(localStorageKey) || defaultValue\r\n );\r\n React.useEffect(() => {\r\n store.set(localStorageKey, value);\r\n }, [localStorageKey, value]);\r\n return [value, setValue];\r\n};","import React from 'react';\r\nimport useStateWithLocalStorage from '../useStateWithLocalStorage';\r\n\r\nexport function SoundBoardButton(props) {\r\n const showClickCount = props.showClickCount || true;\r\n const [clickCount, setClickCount] = useStateWithLocalStorage(`SoundBoard.${props.name}.clickCount`, 0);\r\n\r\n const handleClick = () => {\r\n props.handleClick();\r\n setClickCount(clickCount + 1);\r\n }\r\n return (\r\n \r\n );\r\n}","import React from 'react';\r\n\r\nexport function TextBlock(props) {\r\n const TagName = props.tag || 'p';\r\n let {className, ...extraProps} = props;\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n\r\n}","import React, { useState } from 'react';\r\nimport Tabs from 'react-bootstrap/Tabs';\r\nimport Tab from 'react-bootstrap/Tab';\r\nimport audioFiles, { originalAudioFiles, mandAudioFiles, mashupAudioFiles } from '../audioFiles';\r\nimport playAudio from '../playAudio';\r\nimport useStateWithLocalStorage from '../useStateWithLocalStorage';\r\nimport { SoundBoardButton } from './SoundBoardButton';\r\nimport { TextBlock } from './TextBlock';\r\nimport './SoundBoard.scss';\r\n\r\n\r\n\r\nconst buttonStyles = [\"btn-primary\", \"btn-info\", \"btn-success\", \"btn-warning\", \"btn-danger\"];\r\nconst getButtonStyle = (index) => {\r\n index = index % buttonStyles.length;\r\n return buttonStyles[index];\r\n}\r\n\r\n\r\nexport function SoundBoard(props) {\r\n const [history, setHistory] = useState([]);\r\n const [total, setTotal] = useStateWithLocalStorage('SoundBoard.total', 0);\r\n const handleButtonClick = (audioFile, playOverlapping) => {\r\n setHistory(history.concat(audioFile.title));\r\n setTotal(total + 1);\r\n // playOverlapping is more fun for the short mand clips :)\r\n playAudio(audioFile.src, playOverlapping);\r\n };\r\n const historyReversedCopy = history.slice().reverse();\r\n\r\n const createNormalButtons = audioSet =>\r\n audioSet.map((audioFile, index) =>\r\n handleButtonClick(audioFile, false)} />\r\n );\r\n const createMandButtons = audioSet => {\r\n let mandButtonStyleIndex = 0;\r\n let getMandButtonStyle = (audioFile, index) => {\r\n if (audioFile.startNewButtonColor === true && index > 0) {\r\n mandButtonStyleIndex += 1;\r\n }\r\n return getButtonStyle(mandButtonStyleIndex);\r\n }\r\n return audioSet.map((audioFile, index) => \r\n handleButtonClick(audioFile, true)} />\r\n )\r\n };\r\n\r\n return (\r\n
\r\n Je hebt in totaal {total} keer naar Bob geluisterd !\r\n\r\n \r\n \r\n \r\n \r\n {createNormalButtons(originalAudioFiles)}\r\n \r\n \r\n
\r\n {createMandButtons(mandAudioFiles)}\r\n
\r\n
\r\n \r\n {createNormalButtons(mashupAudioFiles)}\r\n \r\n
\r\n\r\n\r\n\r\n {history.length > 0 &&\r\n Geluisterd naar:\r\n }\r\n\r\n
    \r\n {historyReversedCopy.map((value, index) =>\r\n
  • \r\n {value}\r\n
  • \r\n )}\r\n
\r\n
);\r\n}\r\n","import React, { useState } from 'react';\r\nimport {originalAudioFiles} from '../audioFiles';\r\nimport playAudio from '../playAudio';\r\nimport useStateWithLocalStorage from '../useStateWithLocalStorage';\r\nimport { TextBlock } from './TextBlock';\r\n\r\nexport function IsHetBierTijd() {\r\n const [lastPlayedTitle, setLastPlayedTitle] = useState(null);\r\n const [total, setTotal] = useStateWithLocalStorage('SoundBoard.IsHetBierTijd.total', 0);\r\n\r\n const handleClick = () => {\r\n var randomItem = originalAudioFiles[Math.floor(Math.random() * originalAudioFiles.length)];\r\n setLastPlayedTitle(randomItem.title);\r\n setTotal(total + 1);\r\n playAudio(randomItem.src);\r\n }\r\n\r\n return (\r\n
\r\n

\r\n \r\n

\r\n {lastPlayedTitle !== null &&\r\n Bob zegt: {lastPlayedTitle}\r\n }\r\n Bob heeft in totaal {total} keer je vraag beantwoord !\r\n
\r\n );\r\n}","import React from 'react';\r\nimport './YoutubeIFrame.scss';\r\n\r\nexport function YoutubeIFrame(props) {\r\n let src = \"https://www.youtube.com/embed/\" + props.embedId;\r\n if (props.startAt) {\r\n src += \"?start=\" + props.startAt;\r\n }\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport './AppBackground.scss';\r\nimport backgroundImg from './background.jpg'\r\nimport backgroundLaserImg from './background-laser.jpg'\r\n\r\nexport function AppBackground(props) {\r\n // restart rotating bob head on click, using double animation technique from https://css-tricks.com/restart-css-animation/\r\n // fun effect when browser does not show lasers (mobile firefox?)\r\n // update: Removed this because it still does not work in FF mobile, maybe the event is not fired? see App.js\r\n // and laser img replacement also resets animation\r\n return (\r\n
\r\n
\r\n {/* \r\n preload laser image so it works the first time \r\n https://serversideup.net/how-to-preload-css-background-images/ \r\n */}\r\n \"\"\r\n \"\"\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport './ShareButtons.scss';\r\n\r\n// from https://www.flaticon.com/packs/social-networks-logos-2\r\nimport whatsappLogo from './whatsapp.svg';\r\nimport facebookLogo from './facebook.svg';\r\nimport twitterLogo from './twitter.svg';\r\nimport { TextBlock } from '../TextBlock';\r\n\r\nconst buttons = [\r\n {\r\n name: \"Whatsapp\",\r\n logo: whatsappLogo,\r\n url: \"https://wa.me/?text=\" + encodeURI(\"Wat zegt Huisbaas Bob? \" + window.location.href)\r\n },\r\n {\r\n name: \"Facebook\",\r\n logo: facebookLogo,\r\n url: \"https://www.facebook.com/sharer/sharer.php?u=\" + encodeURI(window.location.href)\r\n },\r\n {\r\n name: \"Twitter\",\r\n logo: twitterLogo,\r\n url: `https://twitter.com/intent/tweet?text=${encodeURI(\"Wat zegt Huisbaas Bob?\")}&url=${encodeURI(window.location.href)}`\r\n },\r\n];\r\n\r\nexport function ShareButtons() {\r\n\r\n return (\r\n
\r\n Deel Bob met de wereld !\r\n

\r\n {buttons.map(button =>\r\n \r\n {button.name}\r\n {button.name}\r\n \r\n )}\r\n

\r\n
\r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\nimport Button from 'react-bootstrap/Button';\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport ProgressBar from 'react-bootstrap/ProgressBar';\r\nimport Spinner from 'react-bootstrap/Spinner';\r\nimport { preloadAllAudio } from '../playAudio';\r\n\r\n\r\nexport function PreloadAudio(props) {\r\n\r\n const [show, setShow] = useState(true);\r\n const [progress, setProgress] = useState(null);\r\n\r\n const handleClose = () => setShow(false);\r\n //const handleShow = () => setShow(true);\r\n\r\n const preloadProgressCallback = progress => {\r\n // create copy of obj to change state\r\n setProgress({ ...progress });\r\n if (progress.getIsLoaded()) {\r\n setTimeout(() => {\r\n // comment this line to keep showing modal\r\n setShow(false);\r\n }, 250);\r\n }\r\n }\r\n useEffect(() => {\r\n preloadAllAudio(preloadProgressCallback);\r\n // [] param: ensure the useEffect only runs once https://css-tricks.com/run-useeffect-only-once/\r\n }, []);\r\n\r\n if (progress === null) {\r\n // prevent null exceptions in template below\r\n return (null);\r\n }\r\n\r\n return (\r\n \r\n \r\n Bob komt eraan...\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n {progress.errors.map(error =>\r\n

\r\n {error}\r\n

\r\n )}\r\n {/*
\r\n                    {JSON.stringify(progress, null, \"    \")}\r\n                
*/}\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n\r\n // return (\r\n // <>\r\n // \r\n\r\n // \r\n // \r\n // Modal heading\r\n // \r\n // Woohoo, you're reading this text in a modal!\r\n // \r\n // \r\n // \r\n // \r\n // \r\n // \r\n // );\r\n}","import React, { useState } from 'react';\r\nimport { WordArt } from './components/WordArt';\r\nimport { SoundBoard } from './components/SoundBoard';\r\nimport { IsHetBierTijd } from './components/IsHetBierTijd';\r\nimport { YoutubeIFrame } from './components/YoutubeIFrame';\r\nimport { AppBackground } from './components/AppBackground/AppBackground';\r\nimport { ShareButtons } from './components/ShareButtons/ShareButtons';\r\nimport { PreloadAudio } from './components/PreloadAudio';\r\nimport { TextBlock } from './components/TextBlock';\r\n\r\n\r\n\r\nfunction App() {\r\n const [bgUseLaser, setBgUserLaser] = useState(false);\r\n const handlePointerDown = event => {\r\n setBgUserLaser(true);\r\n if (event.pointerType !== \"mouse\") {\r\n // Android chrome often fires pointerUp too fast (no effect) or does not fire pointerUp at all.\r\n // So use a timer for mobile\r\n setTimeout(() => { setBgUserLaser(false); }, 200);\r\n };\r\n }\r\n const handlePointerUp = event => {\r\n if (event.pointerType === \"mouse\") {\r\n setBgUserLaser(false);\r\n };\r\n }\r\n return (
handlePointerDown(e)} onPointerUp={e => handlePointerUp(e)}>\r\n \r\n \r\n \r\n\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n {/* */}\r\n \r\n \r\n {/* */}\r\n \r\n\r\n
\r\n Wil je weten waar Bob nu is?\r\n {/* Rickroll :D */}\r\n \r\n Klik hier voor de video !\r\n \r\n
\r\n
\r\n
\r\n {/* */}\r\n
);\r\n}\r\n\r\nexport default App;","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","// ------------- support IE11 voor Bé :) -------------\n// https://www.npmjs.com/package/react-app-polyfill \n// https://stackoverflow.com/questions/55967048/how-do-i-support-ie-11-with-create-react-app-3-0 \n// These must be the first lines in src/index.js\nimport 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\n// --------------------------------------------------\n\n\n// General styles for index and App (including bootstrap), NOT for components\nimport './css/index.scss';\n\n\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n//import './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(, document.getElementById('root'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}