{"version":3,"sources":["img/emojis/cool.svg","img/emojis/starface.svg","img sync /^/.//.*$","img/turn.svg","img/emojis/bigsmiley.svg","img/emojis/blush.svg","img/emojis/hearteyes.svg","img/emojis/omg.svg","img/emojis/oops.svg","img/emojis/smiley.svg","img/logos/region_norrbotten_logo.svg","img/logos/rise_logo.png","img/logos/sparbanken_logo.png","img/simple_pattern.svg","img/arrow.svg","img/emojis/emptystar.svg","img/circle_astroturfing.png","img/circle_bandwagon.png","img/circle_bot.png","img/circle_darkads.png","img/circle_falseflags.png","img/circle_falskmedia.png","img/circle_filterbubbla.png","img/circle_gishgallop.png","img/circle_hackning.png","img/circle_halmgubbar.png","img/circle_lockfåglar.png","img/circle_personangrepp.png","img/circle_trollfabrik.png","img/circle_tystnadsspiralen.png","img/circle_whataboutism.png","img/djurforsok.jpg","img/emojis/star.svg","img/img1.jpg","img/img10.jpg","img/img11.jpg","img/img12.jpg","img/img13.jpg","img/img14.jpg","img/img15.jpg","img/img16.jpg","img/img17.jpg","img/img18.jpg","img/img19.jpg","img/img2.jpg","img/img20.jpg","img/img21.jpg","img/img22.jpg","img/img23.jpg","img/img24.jpg","img/img25.jpg","img/img26.jpg","img/img27.jpg","img/img28.jpg","img/img29.jpg","img/img3.jpg","img/img30.jpg","img/img31.jpg","img/img32.jpg","img/img33.jpg","img/img34.jpg","img/img35.jpg","img/img36.jpg","img/img37.jpg","img/img38.jpg","img/img39.jpg","img/img4.jpg","img/img40.jpg","img/img41.jpg","img/img42.jpg","img/img43.jpg","img/img44.jpg","img/img45.jpg","img/img46.jpg","img/img47.jpg","img/img48.jpg","img/img49.jpg","img/img5.jpg","img/img50.jpg","img/img51.jpg","img/img52.jpg","img/img53.jpg","img/img54.jpg","img/img55.jpg","img/img56.jpg","img/img57.jpg","img/img58.jpg","img/img59.jpg","img/img6.jpg","img/img60.jpg","img/img61.jpg","img/img62.jpg","img/img7.jpg","img/img8.jpg","img/img9.jpg","img/logos/Skärmavbild 2020-12-15 kl. 07.48.07.png","img/logos/region_norrbotten_logo.eps","img/pattern.ai","img/pattern.jpg","img/pattern.svg","img/pattern_simple.png","img/pattern_tile.png","img/pattern_tile_hd.png","data/cardInfo.js","components/Train.js","components/StartPage.js","data/quizSettings.js","audio/correct.mp3","audio/fail.mp3","context/QuizContext.js","components/Card.js","components/QuizAnimation.js","components/QuizCard.js","components/QuizAnswer.js","components/QuizQuestion.js","webpack:///./src/img/emojis/star.svg?6e16","components/Star.js","components/Quiz.js","components/QuizResult.js","components/About.js","components/QuizSelect.js","App.js","reportWebVitals.js","serviceWorkerRegistration.js","index.js"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","categories","title","topColor","bottomColor","cards","categoryId","cardText","imgFront","imgBack","exampleFront","exampleBack","pattern","Card","front","back","zoomed","zoomSelf","useState","rotated","setRotated","useEffect","onClick","className","classNames","src","require","default","img_turn","Train","styled","div","props","color","Text","allCards","zoomedCard","setZoomedCard","card","index","Wrapper","ButtonList","LinkButton","Link","Button","button","StartPage","to","generalInfo","typeDescriptions","cardToExample","exampleToCard","titleToDescription","descriptionToTitle","titleToExample","quizes","questionTypes","questionCategories","totalQuestions","minQuestionsOfType","type","count","QuizContext","React","createContext","QuizContextProvider","questionInfo","setQuestionInfo","questionNumber","setQuestionNumber","result","setResult","correctRef","useRef","wrongRef","Provider","value","playCorrectSound","current","play","playWrongSound","updateScoreCounter","correct","prevResult","v","i","children","ref","correctSample","preload","failSample","SquareWrapper","CardWrapper","width","CardFront","ImageWrapper","ImageFront","Header","Description","forwardRef","cardData","example","forcedCategory","catId","category","find","cat","alt","handleWidth","onResize","w","h","height","correctEmojis","bigSmiley","star","cool","heartEyes","wrongEmojis","oops","blush","omg","wrongAnimation","keyframes","mirroredWrongAnimation","correctAnimation","WiggleWrapper","question","css","FloatingCard","animating","transform","x","y","scale","BackImage","img","rot","QuizAnimation","data","destinationTransform","setDestinationTransform","questionElement","answerElement","answerInfo","questionType","animationStep","setAnimationStep","emoji","setEmoji","useContext","qrect","getBoundingClientRect","arect","deltaScale","left","top","bottom","setTimeout","_","sample","defaultProps","QuizCard","animationData","selected","filteredData","shouldAnimate","imageMode","QuizAnswer","select","deselect","QuizQuestion","answers","checkAnswer","selectedAnswer","setSelectedAnswer","setAnimating","questionRef","setAnimationData","undefined","answer","document","querySelector","_extends","assign","target","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","fill","stroke","points","_ref3","_ref4","_ref5","_ref6","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeWidth","SvgStar","_ref","svgRef","titleId","viewBox","xmlns","ForwardRef","pop","StyledStar","unanswered","StarSvg","Star","wrong","Quiz","difficulty","useParams","questions","setQuestions","setAnswers","setQuestionType","score","setScore","history","useHistory","generateAnswers","tempAnswers","cardSet","filter","includes","newCardSet","take","shuffle","push","tempQuestions","questionCards","tempTypes","predefinedTypes","item","Array","flat","console","log","randomTypes","sampleSize","unused","questionData","zipWith","generateQuestions","newScore","Emoji","ScoreText","ResultText","QuizResult","location","useLocation","queryString","parse","search","icon","coolIcon","text","starfaceIcon","smileIcon","FlexWrapper","FlexImg","BreakLink","a","About","href","sparbankenLogo","riseLogo","regionNorrbottenLogo","QuizSelect","Container","App","exact","path","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","isLocalhost","Boolean","window","hostname","match","registerValidSW","swUrl","config","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","state","controller","onUpdate","onSuccess","catch","error","ReactDOM","render","StrictMode","getElementById","URL","process","origin","addEventListener","fetch","headers","response","contentType","get","status","ready","unregister","reload","checkValidServiceWorker","serviceWorkerRegistration"],"mappings":"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BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,mC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,kC,6BCAzC,OAAe,cAA0B,oE,6BCAzC,OAAe,cAA0B,oD,6BCAzC,OAAe,cAA0B,oC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,qC,6BCAzC,OAAe,cAA0B,4C,6BCAzC,OAAe,oC,6BCAf,OAAe,oC,8ICAFY,EAAa,CACxB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","file":"static/js/main.44d40c22.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/cool.407f4a98.svg\";","export default __webpack_public_path__ + \"static/media/starface.933feaaa.svg\";","var map = {\n\t\"./arrow.svg\": 46,\n\t\"./circle_astroturfing.png\": 67,\n\t\"./circle_bandwagon.png\": 68,\n\t\"./circle_bot.png\": 69,\n\t\"./circle_darkads.png\": 70,\n\t\"./circle_falseflags.png\": 71,\n\t\"./circle_falskmedia.png\": 72,\n\t\"./circle_filterbubbla.png\": 73,\n\t\"./circle_gishgallop.png\": 74,\n\t\"./circle_hackning.png\": 75,\n\t\"./circle_halmgubbar.png\": 76,\n\t\"./circle_lockfåglar.png\": 77,\n\t\"./circle_personangrepp.png\": 78,\n\t\"./circle_trollfabrik.png\": 79,\n\t\"./circle_tystnadsspiralen.png\": 80,\n\t\"./circle_whataboutism.png\": 81,\n\t\"./djurforsok.jpg\": 82,\n\t\"./emojis/bigsmiley.svg\": 32,\n\t\"./emojis/blush.svg\": 33,\n\t\"./emojis/cool.svg\": 14,\n\t\"./emojis/emptystar.svg\": 47,\n\t\"./emojis/hearteyes.svg\": 34,\n\t\"./emojis/omg.svg\": 35,\n\t\"./emojis/oops.svg\": 36,\n\t\"./emojis/smiley.svg\": 37,\n\t\"./emojis/star.svg\": 83,\n\t\"./emojis/starface.svg\": 15,\n\t\"./img1.jpg\": 84,\n\t\"./img10.jpg\": 85,\n\t\"./img11.jpg\": 86,\n\t\"./img12.jpg\": 87,\n\t\"./img13.jpg\": 88,\n\t\"./img14.jpg\": 89,\n\t\"./img15.jpg\": 90,\n\t\"./img16.jpg\": 91,\n\t\"./img17.jpg\": 92,\n\t\"./img18.jpg\": 93,\n\t\"./img19.jpg\": 94,\n\t\"./img2.jpg\": 95,\n\t\"./img20.jpg\": 96,\n\t\"./img21.jpg\": 97,\n\t\"./img22.jpg\": 98,\n\t\"./img23.jpg\": 99,\n\t\"./img24.jpg\": 100,\n\t\"./img25.jpg\": 101,\n\t\"./img26.jpg\": 102,\n\t\"./img27.jpg\": 103,\n\t\"./img28.jpg\": 104,\n\t\"./img29.jpg\": 105,\n\t\"./img3.jpg\": 106,\n\t\"./img30.jpg\": 107,\n\t\"./img31.jpg\": 108,\n\t\"./img32.jpg\": 109,\n\t\"./img33.jpg\": 110,\n\t\"./img34.jpg\": 111,\n\t\"./img35.jpg\": 112,\n\t\"./img36.jpg\": 113,\n\t\"./img37.jpg\": 114,\n\t\"./img38.jpg\": 115,\n\t\"./img39.jpg\": 116,\n\t\"./img4.jpg\": 117,\n\t\"./img40.jpg\": 118,\n\t\"./img41.jpg\": 119,\n\t\"./img42.jpg\": 120,\n\t\"./img43.jpg\": 121,\n\t\"./img44.jpg\": 122,\n\t\"./img45.jpg\": 123,\n\t\"./img46.jpg\": 124,\n\t\"./img47.jpg\": 125,\n\t\"./img48.jpg\": 126,\n\t\"./img49.jpg\": 127,\n\t\"./img5.jpg\": 128,\n\t\"./img50.jpg\": 129,\n\t\"./img51.jpg\": 130,\n\t\"./img52.jpg\": 131,\n\t\"./img53.jpg\": 132,\n\t\"./img54.jpg\": 133,\n\t\"./img55.jpg\": 134,\n\t\"./img56.jpg\": 135,\n\t\"./img57.jpg\": 136,\n\t\"./img58.jpg\": 137,\n\t\"./img59.jpg\": 138,\n\t\"./img6.jpg\": 139,\n\t\"./img60.jpg\": 140,\n\t\"./img61.jpg\": 141,\n\t\"./img62.jpg\": 142,\n\t\"./img7.jpg\": 143,\n\t\"./img8.jpg\": 144,\n\t\"./img9.jpg\": 145,\n\t\"./logos/Skärmavbild 2020-12-15 kl. 07.48.07.png\": 146,\n\t\"./logos/region_norrbotten_logo.eps\": 147,\n\t\"./logos/region_norrbotten_logo.svg\": 38,\n\t\"./logos/rise_logo.png\": 39,\n\t\"./logos/sparbanken_logo.png\": 40,\n\t\"./pattern.ai\": 148,\n\t\"./pattern.jpg\": 149,\n\t\"./pattern.svg\": 150,\n\t\"./pattern_simple.png\": 151,\n\t\"./pattern_tile.png\": 152,\n\t\"./pattern_tile_hd.png\": 153,\n\t\"./simple_pattern.svg\": 41,\n\t\"./turn.svg\": 31\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 22;","export default __webpack_public_path__ + \"static/media/turn.bcc3e12a.svg\";","export default __webpack_public_path__ + \"static/media/bigsmiley.d6f60bac.svg\";","export default __webpack_public_path__ + \"static/media/blush.1d11e197.svg\";","export default __webpack_public_path__ + \"static/media/hearteyes.37518714.svg\";","export default __webpack_public_path__ + \"static/media/omg.3e4c1c87.svg\";","export default __webpack_public_path__ + \"static/media/oops.7ece88f9.svg\";","export default __webpack_public_path__ + \"static/media/smiley.913c7853.svg\";","export default __webpack_public_path__ + \"static/media/region_norrbotten_logo.2bb2545e.svg\";","export default __webpack_public_path__ + \"static/media/rise_logo.9c7f5ba9.png\";","export default __webpack_public_path__ + \"static/media/sparbanken_logo.be33a220.png\";","export default __webpack_public_path__ + \"static/media/simple_pattern.5ea2ba5d.svg\";","export default __webpack_public_path__ + \"static/media/arrow.34673dd7.svg\";","export default __webpack_public_path__ + \"static/media/emptystar.11a1b54e.svg\";","export default __webpack_public_path__ + \"static/media/circle_astroturfing.f0629988.png\";","export default __webpack_public_path__ + \"static/media/circle_bandwagon.08392101.png\";","export default __webpack_public_path__ + \"static/media/circle_bot.70beb629.png\";","export default __webpack_public_path__ + \"static/media/circle_darkads.067d93a1.png\";","export default __webpack_public_path__ + \"static/media/circle_falseflags.f5dc5c63.png\";","export default __webpack_public_path__ + \"static/media/circle_falskmedia.58a62907.png\";","export default __webpack_public_path__ + \"static/media/circle_filterbubbla.20ad7127.png\";","export default __webpack_public_path__ + \"static/media/circle_gishgallop.5e91d445.png\";","export default __webpack_public_path__ + \"static/media/circle_hackning.7b20d322.png\";","export default __webpack_public_path__ + \"static/media/circle_halmgubbar.83e0700e.png\";","export default __webpack_public_path__ + \"static/media/circle_lockfåglar.fc4ef42d.png\";","export default __webpack_public_path__ + \"static/media/circle_personangrepp.5aadcadd.png\";","export default __webpack_public_path__ + \"static/media/circle_trollfabrik.e713ae2c.png\";","export default __webpack_public_path__ + \"static/media/circle_tystnadsspiralen.6ee917c6.png\";","export default __webpack_public_path__ + \"static/media/circle_whataboutism.db68ec2e.png\";","export default __webpack_public_path__ + \"static/media/djurforsok.bea575b2.jpg\";","export default __webpack_public_path__ + \"static/media/star.ec2ed83b.svg\";","export default __webpack_public_path__ + \"static/media/img1.4399480a.jpg\";","export default __webpack_public_path__ + \"static/media/img10.6c115d41.jpg\";","export default __webpack_public_path__ + \"static/media/img11.27466ab3.jpg\";","export default __webpack_public_path__ + \"static/media/img12.3deb84b4.jpg\";","export default __webpack_public_path__ + \"static/media/img13.4a17b3d1.jpg\";","export default __webpack_public_path__ + \"static/media/img14.1f5f2f96.jpg\";","export default __webpack_public_path__ + \"static/media/img15.6ba5bcd8.jpg\";","export default __webpack_public_path__ + \"static/media/img16.15664c35.jpg\";","export default __webpack_public_path__ + \"static/media/img17.20947ccc.jpg\";","export default __webpack_public_path__ + \"static/media/img18.31f82c8a.jpg\";","export default __webpack_public_path__ + \"static/media/img19.267fc30f.jpg\";","export default __webpack_public_path__ + \"static/media/img2.5f9b6553.jpg\";","export default __webpack_public_path__ + \"static/media/img20.edac8faf.jpg\";","export default __webpack_public_path__ + \"static/media/img21.72e80beb.jpg\";","export default __webpack_public_path__ + \"static/media/img22.8ef7869c.jpg\";","export default __webpack_public_path__ + \"static/media/img23.252426c9.jpg\";","export default __webpack_public_path__ + \"static/media/img24.39a7d71a.jpg\";","export default __webpack_public_path__ + \"static/media/img25.ea95158d.jpg\";","export default __webpack_public_path__ + \"static/media/img26.42515603.jpg\";","export default __webpack_public_path__ + \"static/media/img27.c555f861.jpg\";","export default __webpack_public_path__ + \"static/media/img28.075c2851.jpg\";","export default __webpack_public_path__ + \"static/media/img29.73719aae.jpg\";","export default __webpack_public_path__ + \"static/media/img3.ba16c86c.jpg\";","export default __webpack_public_path__ + \"static/media/img30.308ab627.jpg\";","export default __webpack_public_path__ + \"static/media/img31.88dd8a82.jpg\";","export default __webpack_public_path__ + \"static/media/img32.c7859bef.jpg\";","export default __webpack_public_path__ + \"static/media/img33.064799ac.jpg\";","export default __webpack_public_path__ + \"static/media/img34.a924d577.jpg\";","export default __webpack_public_path__ + \"static/media/img35.c46c8037.jpg\";","export default __webpack_public_path__ + \"static/media/img36.869f1807.jpg\";","export default __webpack_public_path__ + \"static/media/img37.b7118fa5.jpg\";","export default __webpack_public_path__ + \"static/media/img38.65f6384f.jpg\";","export default __webpack_public_path__ + \"static/media/img39.9c94b220.jpg\";","export default __webpack_public_path__ + \"static/media/img4.511dafdd.jpg\";","export default __webpack_public_path__ + \"static/media/img40.ca80df9c.jpg\";","export default __webpack_public_path__ + \"static/media/img41.501a9377.jpg\";","export default __webpack_public_path__ + \"static/media/img42.daba98cc.jpg\";","export default __webpack_public_path__ + \"static/media/img43.9c815879.jpg\";","export default __webpack_public_path__ + \"static/media/img44.2bce9a3e.jpg\";","export default __webpack_public_path__ + \"static/media/img45.a5a578c8.jpg\";","export default __webpack_public_path__ + \"static/media/img46.f91bf366.jpg\";","export default __webpack_public_path__ + \"static/media/img47.2e1b24ef.jpg\";","export default __webpack_public_path__ + \"static/media/img48.d89998f1.jpg\";","export default __webpack_public_path__ + \"static/media/img49.5b56aae6.jpg\";","export default __webpack_public_path__ + \"static/media/img5.9d681436.jpg\";","export default __webpack_public_path__ + \"static/media/img50.1d3cb231.jpg\";","export default __webpack_public_path__ + \"static/media/img51.15c06bbd.jpg\";","export default __webpack_public_path__ + \"static/media/img52.56772e5d.jpg\";","export default __webpack_public_path__ + \"static/media/img53.ce35bacf.jpg\";","export default __webpack_public_path__ + \"static/media/img54.9b52b408.jpg\";","export default __webpack_public_path__ + \"static/media/img55.59cbb7d0.jpg\";","export default __webpack_public_path__ + \"static/media/img56.531e1fab.jpg\";","export default __webpack_public_path__ + \"static/media/img57.3e84de95.jpg\";","export default __webpack_public_path__ + \"static/media/img58.aaddbbc1.jpg\";","export default __webpack_public_path__ + \"static/media/img59.727976be.jpg\";","export default __webpack_public_path__ + \"static/media/img6.5f65139c.jpg\";","export default __webpack_public_path__ + \"static/media/img60.197861a1.jpg\";","export default __webpack_public_path__ + \"static/media/img61.13be4405.jpg\";","export default __webpack_public_path__ + \"static/media/img62.f4dcfc5e.jpg\";","export default __webpack_public_path__ + \"static/media/img7.4dd903bc.jpg\";","export default __webpack_public_path__ + \"static/media/img8.1d2291f1.jpg\";","export default __webpack_public_path__ + \"static/media/img9.49816790.jpg\";","export default __webpack_public_path__ + \"static/media/Skärmavbild 2020-12-15 kl. 07.48.07.f3c5a898.png\";","export default __webpack_public_path__ + \"static/media/region_norrbotten_logo.9ef3303d.eps\";","export default __webpack_public_path__ + \"static/media/pattern.26179457.ai\";","export default __webpack_public_path__ + \"static/media/pattern.0d4a590e.jpg\";","export default __webpack_public_path__ + \"static/media/pattern.d7260fa5.svg\";","export default __webpack_public_path__ + \"static/media/pattern_simple.b9fe21f8.png\";","export default \"data:image/png;base64,\"","export default \"data:image/png;base64,\"","export const categories = [\n {title: 'Psykosociala fenomen', id:0, topColor: '#D68184', bottomColor: '#CE606B'},\n {title: 'Illasinnad retorik', id:1, topColor: '#A99437', bottomColor: '#958A54'},\n {title: 'Falska identiteter', id:2, topColor: '#8DBCCC', bottomColor: '#68ABBE'},\n {title: 'Symbolhandlingar', id:3, topColor: '#908293', bottomColor: '#837C84'},\n]\n\nexport const cards = [\n {\n title: 'bandwagoneffekt',\n categoryId: 0,\n cardText: 'Personer som upplever sig ha samma åsikt som majoriteten är mer benägna att dela med sig av sin åsikt. Botar och troll kan användas för att ge fler gilla-markeringar, kommentarer eller delningar på sociala medier för att ge intrycket av att vissa åsikter är mer populära än de egentligen är.',\n imgFront: 'img3.jpg',\n imgBack: 'img4.jpg',\n exampleFront: 'img5.jpg',\n exampleBack: 'img6.jpg',\n pattern: 'circle_bandwagon.png'\n },\n {\n title: 'tystnadsspiralen',\n categoryId: 0,\n cardText: 'Personer som upplever sig vara i minoritet är mindre benägna att dela med sig av sin åsikt. Intrycket av att man är i minoritet för att man inte vill eller vågar uttala sig i en fråga. Detta spelar på vår rädsla för att hamna utanför eller pekas ut som konstig.',\n imgFront: 'img7.jpg',\n imgBack: 'img8.jpg',\n exampleFront: 'img9.jpg',\n exampleBack: 'img10.jpg',\n pattern: 'circle_tystnadsspiralen.png'\n },\n {\n title: 'filterbubbla',\n categoryId: 0,\n cardText: 'Naturliga grupperingar, på eller utanför internet, där man kommunicerar med andra som delar samma åsikter och uppfattningar. De som ingår i gruppen exponeras sällan för annorlunda åsikter. På nätet kan detta utnyttjas för att sprida riktad information till specifika grupper.',\n imgFront: 'img11.jpg',\n imgBack: 'img12.jpg',\n exampleFront: 'img13.jpg',\n exampleBack: 'img14.jpg',\n pattern: 'circle_filterbubbla.png'\n },\n {\n title: 'dark ads',\n categoryId: 0,\n cardText: 'Annonser som är skräddarsydda och synliga för en snäv målgrupp, men osynliga för andra, t. ex forskare eller journalister. Lämpliga mottagare identifieras genom data från bland annat sociala medier och utnyttjas för att sprida vinklad information. För den som nås av budskapet framstår det som att informationen är synlig för alla.',\n imgFront: 'img15.jpg',\n imgBack: 'img16.jpg',\n exampleFront: 'img17.jpg',\n exampleBack: 'img18.jpg',\n pattern: 'circle_darkads.png'\n },\n {\n title: 'gish gallop',\n categoryId: 1,\n cardText: 'Motparten översvämmas med en flod av argument, fakta och källor, varav många är falska eller orelaterade till frågan. För den som börjar bemöta störtfloden är spelet förlorat, då diskussionen kommer att handla om något annat än sakfrågan.',\n imgFront: 'img19.jpg',\n imgBack: 'img20.jpg',\n exampleFront: 'djurforsok.jpg',\n exampleBack: 'img22.jpg',\n pattern: 'circle_gishgallop.png'\n },\n {\n title: 'personangrepp',\n categoryId: 1,\n cardText: 'Att attackera, förtala och förlöjliga personen bakom ett argument eller personens handlingar, istället för att kritisera argumentet i sig. Denna metod används ofta i syfte att tysta ner, hindra och avskräcka andra från att delta i diskussionen.',\n imgFront: 'img23.jpg',\n imgBack: 'img24.jpg',\n exampleFront: 'img25.jpg',\n exampleBack: 'img26.jpg',\n pattern: 'circle_personangrepp.png'\n },\n {\n title: 'halmgubbar',\n categoryId: 1,\n cardText: 'Att medvetet förvränga motståndarens argument och ståndpunkter och sedan argumentera mot dessa istället för motståndarens faktiska åsikter. Motståndaren tvingas lägga ner energi på att förklara vad som egentligen menas samtidigt som fokus från sakfrågan förskjuts.',\n imgFront: 'img27.jpg',\n imgBack: 'img28.jpg',\n exampleFront: 'img29.jpg',\n exampleBack: 'img30.jpg',\n pattern: 'circle_halmgubbar.png'\n },\n {\n \n title: 'whataboutism',\n categoryId: 1,\n cardText: 'Att ta fokus från ett argument genom att belysa liknande fenomen som inte fått lika mycket uppmärksamhet, men som inte riktigt är relevant i frågan. Ofta yttrar sig detta i att man jämför något som anses vara fel med något annat ännu sämre, och på så sätt ta fokus från sakfrågan.',\n imgFront: 'img31.jpg',\n imgBack: 'img32.jpg',\n exampleFront: 'img33.jpg',\n exampleBack: 'img34.jpg',\n pattern: 'circle_whataboutism.png'\n },\n {\n title: 'lockfåglar',\n categoryId: 2,\n cardText: 'En person som ger intrycket av att vara fristående men som i själva verket samarbetar med eller tar emot betalning av någon annan. Denna metod används ibland för att skriva positiva produktrecensioner för webbutiker och för att ge trovärdighet till en person eller ett budskap.',\n imgFront: 'img35.jpg',\n imgBack: 'img36.jpg',\n exampleFront: 'img37.jpg',\n exampleBack: 'img38.jpg',\n pattern: 'circle_lockfåglar.png'\n },\n {\n title: 'falsk media',\n categoryId: 2,\n cardText: 'Desinformation kan spridas genom förfalskade nyhetssidor som efterliknar äkta sådana. På internet kan man exempelvis skapa en falsk webbplats som är i stort sett identisk med en riktig webbplats, men med annat innehåll.',\n imgFront: 'img39.jpg',\n imgBack: 'img40.jpg',\n exampleFront: 'img41.jpg',\n exampleBack: 'img42.jpg',\n pattern: 'circle_falskmedia.png'\n },\n {\n title: 'bot',\n categoryId: 2,\n cardText: 'Ett datorprogram som utför automatiserade uppgifter och till exempel delar vissa typer av information på sociala medier. Inom informationspåverkan kan botar exempelvis användas för att förstärka utvalda budskap, sprida desinformation och för att kartlägga andra, mänskliga användare. ',\n imgFront: 'img43.jpg',\n imgBack: 'img44.jpg',\n exampleFront: 'img45.jpg',\n exampleBack: 'img46.jpg',\n pattern: 'circle_bot.png'\n },\n {\n title: 'trollfabrik',\n categoryId: 2,\n cardText: 'Ett företag där de anställda skapar och driver falska identiteter på sociala medier. Personer skriver inlägg och kommenterar andras inlägg för att skpa opinion för vissa åsikter. Ofta försöker de provocera fram känslomässiga svar och gräl som är destruktiva för diskussionsklimatet.',\n imgFront: 'img47.jpg',\n imgBack: 'img48.jpg',\n exampleFront: 'img49.jpg',\n exampleBack: 'img50.jpg',\n pattern: 'circle_trollfabrik.png'\n },\n {\n title: 'hackning',\n categoryId: 3,\n cardText: 'Detta innebär obehörig åtkomst till en dator eller ett nätverk, vilket i sig är ett brott. Inom informationspåverkan är ibland det egentliga målet att sprida misstänksamhet om att ett system är exponerat eller osäkert, vilket underminerar förtroendet för systemet ifråga eller organisationen bakom.',\n imgFront: 'img51.jpg',\n imgBack: 'img52.jpg',\n exampleFront: 'img53.jpg',\n exampleBack: 'img54.jpg',\n pattern: 'circle_hackning.png'\n },\n {\n title: 'astroturfing',\n categoryId: 3,\n cardText: 'Riktiga demonstrationer används för att uttrycka stöd för en viss politisk fråga och är en viktig del i vår demokrati. Denna metod utnyttjar känslan av äkthet och folkligt engagemang, som vi människor lätt dras med i, genom att rigga en demonstration och ge ett falskt intryck av stöd för en viss fråga på gräsrotsnivå.',\n imgFront: 'img55.jpg',\n imgBack: 'img56.jpg',\n exampleFront: 'img57.jpg',\n exampleBack: 'img58.jpg',\n pattern: 'circle_astroturfing.png'\n },\n {\n title: 'false flags',\n categoryId: 3,\n cardText: 'Detta var ursprungligen en sjökrigsterm där en aktör seglade under en annan flagga än sin egen. I modern tappning beskriver termen specialoperationer som lagts upp så att det framstår som om de utförts av en viss aktör snarare än den som faktiskt planerade och utförde den.',\n imgFront: 'img59.jpg',\n imgBack: 'img60.jpg',\n exampleFront: 'img61.jpg',\n exampleBack: 'img62.jpg',\n pattern: 'circle_falseflags.png'\n },\n]","import React, { useState, useEffect } from 'react'\nimport { cards, categories } from '../data/cardInfo'\nimport classNames from 'classnames'\nimport styled, { css } from 'styled-components'\nimport { size } from 'lodash'\nimport img_arrow from '../img/arrow.svg'\nimport img_turn from '../img/turn.svg'\n\n\nconst Card = ({ front, back, zoomed, zoomSelf}) => {\n const [rotated, setRotated] = useState(false)\n \n const handleClick = () => {\n if (zoomed) {\n setRotated(!rotated)\n } else {\n zoomSelf()\n }\n }\n\n useEffect(() => {\n if (!zoomed) {\n setRotated(false)\n }\n }, [zoomed])\n\n\n return (\n
\n \n \n \n \n \n \n
\n )\n}\n\nconst Train = () => {\n\n const Wrapper = styled.div`\n display:grid;\n place-items: center;\n min-height: 600px;\n overflow:hidden;\n \n `\n\n const CategoriesList = styled.div` \n place-items: center;\n transition: max-height 1s ease-out;\n align-items: center;\n \n `\n const CategoriesHeading = styled.div`\n color: white;\n position:relative;\n margin-top:5px;\n padding-top:25px;\n font-size:20px!important;\n \n margin: 0 0 1% 0;\n height: 50px;\n background: ${props => props.color} \n `\n \n const HeaderImage = styled.div`\n position:absolute;\n right:20px;\n top:25px;\n \n ` \n const HeaderText = styled.div`\n float:center;\n \n `\n \n const CategoriesCardList = styled.div`\n \n -ms-box-orient: horizontal;\n display: flex;\n -webkit-flex-wrap: wrap;\n flex-wrap: wrap;\n justify-content: center;\n overflow: hidden;\n transition: max-height 0.5s;\n height:100%;\n max-height: 3000px!important;\n \n \n `\n const Header = styled.div`\n font-size: 40px;\n `\n const Text = styled.div`\n font-size: 0.8em;\n margin-bottom:20px;\n padding:20px;\n max-width:40em;\n margin: auto;\n `\n\n\n\n const allCards = cards\n const allCategories = categories\n const [zoomedCard, setZoomedCard] = useState()\n const [selectedCategory, setSelectedCategory] = useState()\n \n const handleCardClick = (index) => {\n selectedCategory === index ? setSelectedCategory(-1) : setSelectedCategory(index)\n setZoomedCard(-1)\n }\n\n return ( \n
\n

\n Träna på begrepp\n

\n \n Här kan du träna på olika begrepp om informationspåverkan. Tryck en gång på ett kort för att förstora, och en gång till för att se baksidan av kortet med ett exempel på begreppet.\n \n {\n\n \n \n \n
\n {\n allCards.map((card, index) => { \n return (\n setZoomedCard(index)}\n />)\n })\n } \n
\n \n \n \n }\n
\n )\n}\n\nexport default Train","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport styled, { css } from 'styled-components'\nimport { categories } from '../data/cardInfo'\n\n\nexport const Wrapper = styled.div`\n padding: 1rem 2rem;\n max-width:50em;\n`\n\nexport const ButtonList = styled.div`\n display: flex;\n flex-direction: column;\n margin: 2em 1em;\n align-items: center;\n `\n\nexport const LinkButton = styled(Link)`\n text-decoration: none;\n margin: 1em 1em;\n padding: 1em;\n max-width: 15em;\n width:100%;\n\n font-family: 'Monaco';\n color: white;\n background: ${props => props.color}\n`\n\nexport const Button = styled.button`\n text-decoration: none;\n border: none;\n margin: 1em 1em;\n padding: 1em 3em;\n font-family: 'Monaco';\n cursor:pointer;\n color: white;\n background: ${props => props.color}\n`\n\nconst StartPage = () => {\n return (\n \n

Bland botar och troll

\n
\n Hur mycket kan du om informationspåverkan på nätet?
\n Testa dina kunskaper här.\n
\n \n \n Träna på begrepp\n Starta quiz\n Om\n \n
\n )\n}\n\nexport default StartPage\n","\nexport const generalInfo = {\n typeDescriptions: {\n cardToExample: 'Matcha kortet med rätt exempel',\n exampleToCard: 'Matcha exemplet med rätt kort',\n titleToDescription: 'Matcha begreppet med rätt beskrivning',\n descriptionToTitle: 'Matcha beskrivningen med rätt begrepp',\n titleToExample: 'Matcha begreppet med rätt exempel',\n },\n}\n\n\nexport const easyQuiz = {\n questionTypes: [\n 'cardToExample',\n 'exampleToCard',\n ],\n questionCategories: [0, 2],\n totalQuestions: 5,\n}\nexport const hardQuiz = {\n questionTypes: [\n 'cardToExample',\n 'exampleToCard',\n 'titleToDescription',\n 'descriptionToTitle',\n 'titleToExample'\n ],\n minQuestionsOfType: [\n {type: 'cardToExample', count: 3}\n ],\n totalQuestions: 5,\n}\n\nexport const quizes = {\n \"easy\": easyQuiz,\n \"hard\": hardQuiz\n}\n","export default __webpack_public_path__ + \"static/media/correct.b7dbf8b8.mp3\";","export default __webpack_public_path__ + \"static/media/fail.79cf6a30.mp3\";","import React, { useRef, useState } from 'react'\nimport correctSample from '../audio/correct.mp3'\nimport failSample from '../audio/fail.mp3'\n\nexport const QuizContext = React.createContext()\n\nconst QuizContextProvider = (props) => {\n\n const [questionInfo, setQuestionInfo] = useState()\n const [questionNumber, setQuestionNumber] = useState(0)\n const [result, setResult] = useState([])\n const correctRef = useRef()\n const wrongRef = useRef()\n const playCorrectSound = () => {\n correctRef.current.play()\n }\n const playWrongSound = () => {\n wrongRef.current.play()\n }\n\n const updateScoreCounter = (correct) => {\n setResult(prevResult => {\n return prevResult.map((v,i) => (i === questionNumber) ? correct : v)\n })\n }\n\n return (\n \n {props.children}\n \n )\n}\n\nexport default QuizContextProvider","import React, { useEffect, useRef } from 'react'\nimport ReactResizeDetector, { withResizeDetector } from 'react-resize-detector'\nimport styled from 'styled-components'\nimport classNames from 'classnames'\nimport { categories } from '../data/cardInfo'\n\nconst SquareWrapper = styled.div`\n position: relative;\n width:100%;\n &:after {\n content: '';\n display:block;\n padding-bottom:100%;\n }\n`\n\nconst CardWrapper = styled.div`\n position: absolute;\n width:100%;\n height:100%;\n color: white;\n font-size: ${props => props.width * 0.04}px;\n transition: transform 0.5s;\n transform-style: preserve-3d;\n &.rotated {\n transition: transform 0.5s;\n transform: rotateY(180deg);\n }\n`\n\nconst CardFront = styled.div`\n position: absolute;\n width:100%;\n height:100%;\n backface-visibility:hidden;\n *{\n backface-visibility:hidden;\n }\n `\n\nconst CardBack = styled(CardFront)`\n position:absolute;\n top:0;\n left:0;\n width: 100%;\n height: 100%;\n transform: rotateY(180deg);\n `\n\nconst ImageWrapper = styled(CardWrapper)`\n position: relative;\n`\nconst ImageFront = styled(CardFront)`\n position: relative;\n`\n\nconst Header = styled.div`\n background: ${props => props.color};\n width:100%;\n text-transform: lowercase;\n height:50%;\n box-sizing:border-box;\n position: relative;\n text-align: left;\n\n h4 {\n font-weight: normal;\n position: absolute;\n bottom: 0.5em;\n left: 1em;\n max-width:70%;\n \n font-size:2em;\n margin:0;\n }\n`\nconst Description = styled.div`\n background: ${props => props.color};\n text-align: left;\n height:50%;\n font-size: 0.9em;\n padding:1em 2em 1em 2em;\n box-sizing:border-box;\n`\n\nconst Card = React.forwardRef(({cardData, example, forcedCategory}, ref) => {\n\n const catId = forcedCategory !== null ? forcedCategory : cardData.categoryId\n const category = categories.find(cat => cat.id === catId)\n const backImage = require(`../img/${example ? cardData.exampleBack : cardData.imgBack}`).default\n\n const rotated = false\n\n const handleResize = (w, h) => {\n \n }\n\n return (\n
\n {example ? (\n \n\n \n \"\"/\n \n\n \n ) : (\n \n \n {({width, height}) => (\n \n \n

{cardData.title}

\n {cardData.cardText}\n
\n\n
\n )}\n
\n
\n )}\n
\n )\n})\n\nexport default Card\n","import React, { useContext, useEffect, useState } from 'react'\nimport styled, { css, keyframes } from 'styled-components'\nimport { QuizContext } from '../context/QuizContext'\nimport QuizCard from './QuizCard'\nimport bigSmiley from '../img/emojis/bigsmiley.svg'\nimport star from '../img/emojis/starface.svg'\nimport heartEyes from '../img/emojis/hearteyes.svg'\nimport cool from '../img/emojis/cool.svg'\nimport oops from '../img/emojis/oops.svg'\nimport blush from '../img/emojis/blush.svg'\nimport omg from '../img/emojis/omg.svg'\nimport _, { set } from 'lodash'\n\nconst correctEmojis = [bigSmiley, star, cool, heartEyes]\nconst wrongEmojis = [oops, blush, omg]\n\nconst wrongAnimation = keyframes`\n0% { transform: translate(0,0);}\n20% { transform: translate(-20px,0); }\n60% { transform: translate(20px,0); }\n100% { transform: translate(0px,-10px); }\n`\nconst mirroredWrongAnimation = keyframes`\n0% { transform: translate(0,0);}\n20% { transform: translate(-20px,0); }\n60% { transform: translate(20px,0); }\n100% { transform: translate(0px,10px); }\n`\n\nconst correctAnimation = keyframes`\n0% { filter: hue-rotate(0deg); }\n50% { transform: translate(0,-50px);}\n100% { filter: hue-rotate(360deg); }\n`\nconst mirroredCorrectAnimation = keyframes`\n0% { transform: translate(0,0);}\n100% { transform: translate(0px,10px); }\n`\n\n\nconst WiggleWrapper = styled.div`\n transform-style: preserve-3d;\n backface-visibility: hidden;\n z-index:1;\n &.wrong {\n z-index:-1;\n ${props => props.question ? css`\n animation: ${wrongAnimation} 0.2s linear 2;\n ` : css `\n animation: ${mirroredWrongAnimation} 0.2s linear 2 reverse;\n `}\n }\n &.correct {\n z-index:-1;\n ${props => props.question ? css`\n animation: ${correctAnimation} 1s linear 1;\n ` : css `\n animation: ${correctAnimation} 1s linear 1;\n `}\n }\n`\n\nconst FloatingCard = styled.div`\n \n transform-style: preserve-3d;\n \n * {\n transform-style: preserve-3d;\n backface-visibility: hidden;\n }\n\n ${props => props.animating && css`\n .selected {\n box-shadow: none !important;\n }\n `}\n\n &.align {\n transform: translate(\n ${props => props.transform.x}px,\n ${props => props.transform.y}px\n ) \n translateZ(500px) \n scale(${props => props.transform.scale});\n transition: all 0.5s;\n }\n &.rotate {\n transform: translate(\n ${props => props.transform.x}px,\n ${props => props.transform.y}px\n )\n translateZ(500px)\n scale(${props => props.transform.scale}) \n rotateY(180deg);\n transition: all 0.75s;\n }\n &.wrong, &.correct {\n transform: translate(\n ${props => props.transform.x}px,\n ${props => props.transform.y}px\n )\n scale(${props => props.transform.scale}) \n rotateY(180deg);\n transition: all 0.75s;\n }\n\n img {\n width:100%;\n }\n`\n\nconst BackImage = styled.img`\n position:absolute;\n top:50%;\n left:0;\n transform: rotateZ(${props => props.rot}deg) rotateY(180deg);\n backface-visibility: hidden;\n`\n\nconst QuizAnimation = ({animating, data, question, ...props}) => {\n\n const [destinationTransform, setDestinationTransform] = useState({x:0,y:0,scale:1})\n const {questionElement, answerElement, questionInfo, answerInfo, questionType} = data\n const [animationStep, setAnimationStep] = useState()\n const [emoji, setEmoji] = useState()\n const {playCorrectSound, playWrongSound, updateScoreCounter} = useContext(QuizContext)\n\n useEffect(() => {\n if (animating) {\n const qrect = questionElement.current.getBoundingClientRect()\n const arect = answerElement.getBoundingClientRect()\n \n if (question) {\n const scale = arect.width / qrect.width\n const deltaScale = arect.width - qrect.width\n setDestinationTransform({\n x: arect.left - qrect.left + deltaScale/2,\n y: arect.top - qrect.bottom - deltaScale/2,\n scale: arect.width / qrect.width,\n })\n } else {\n setDestinationTransform({\n x: 0,\n y: 0,\n scale: 1,\n })\n }\n\n //setAnimationStep()\n setTimeout(() => {\n setAnimationStep('align')\n }, 200)\n setTimeout(() => {\n setAnimationStep('rotate')\n updateScoreCounter(data.correct)\n }, 800)\n setTimeout(() => {\n setAnimationStep('align')\n }, 2000)\n // setTimeout(() => {\n // if (!data.correct) {\n // setAnimationStep('wrong')\n // //playWrongSound()\n // } else {\n // //playCorrectSound()\n // setAnimationStep('correct')\n // }\n // }, 1400)\n } else {\n setAnimationStep()\n }\n }, [animating])\n\n useEffect(() => {\n setEmoji(_.sample(data.correct ? correctEmojis : wrongEmojis))\n }, [data.correct])\n\n return (\n \n \n {props.children}\n {animating && question && }\n {/* {animating && question && }\n {animating && !question && } */}\n \n \n )\n // return (\n // <>\n // \n // \n // \n // \n // \n // \n // \n // )\n}\n\nQuizAnimation.defaultProps = {\n data: {}\n}\n\nexport default QuizAnimation\n","import React, { useContext } from 'react'\nimport { QuizContext } from '../context/QuizContext'\nimport Card from './Card'\nimport QuizAnimation from './QuizAnimation'\n\nconst QuizCard = React.forwardRef((props, ref) => {\n const {cardData, questionType, question, animationData, selected, animating} = props\n const {questionInfo} = useContext(QuizContext)\n let {title, cardText, ...filteredData} = {...cardData}\n \n const shouldAnimate = (question && animating) || (!question && animating && selected)\n\n const cardToExample = questionType === 'cardToExample'\n const exampleToCard = questionType === 'exampleToCard'\n const titleToDescription = questionType === 'titleToDescription'\n const descriptionToTitle = questionType === 'descriptionToTitle'\n const titleToExample = questionType === 'titleToExample'\n \n //Done to change colors of answers to match question\n //const questionCategory = (!question && !exampleToCard) ? questionInfo.categoryId : null\n const questionCategory = null\n\n const imageMode = (!question && (cardToExample || titleToExample)) || (question && exampleToCard)\n if ((!question && titleToDescription) || (question && descriptionToTitle)) {\n filteredData.cardText = cardText\n }\n else if ((!question && descriptionToTitle) || (question && titleToDescription)) {\n filteredData.title = title\n } else {\n filteredData = {...filteredData, title, cardText}\n }\n\n return (\n \n \n \n )\n})\n\nexport default QuizCard\n","import React from 'react'\nimport QuizCard from './QuizCard'\nimport classNames from 'classnames'\n\nconst QuizAnswer = ({card, questionType, selected, select, deselect, animating, animationData}) => {\n \n const handleClick = () => {\n if (selected) {\n deselect()\n } else {\n select()\n }\n }\n \n return (\n
\n \n
\n )\n}\n\nexport default QuizAnswer","import React, { useEffect, useRef, useState } from 'react'\nimport { cards, categories } from '../data/cardInfo'\nimport _ from 'lodash'\nimport classNames from 'classnames'\nimport { Button, Wrapper } from './StartPage'\nimport QuizCard from './QuizCard'\nimport QuizAnswer from './QuizAnswer'\nimport styled from 'styled-components'\nimport QuizAnimation from './QuizAnimation'\n\nconst QuizQuestion = ({question, questionType, answers, checkAnswer}) => {\n\n const [selectedAnswer, setSelectedAnswer] = useState()\n const [animating, setAnimating] = useState(false)\n \n const [questionRect, setQuestionRect] = useState({})\n const [answerRect, setAnswerRect] = useState({})\n const questionRef = useRef()\n const [animationData, setAnimationData] = useState({})\n\n const chooseAnswer = () => {\n \n const answer = answers[selectedAnswer]\n const correct = answer === question\n\n if (animating) {\n checkAnswer(correct)\n setAnimating(false)\n setSelectedAnswer(null)\n setAnimationData({})\n return\n }\n setAnimating(true)\n setAnimationData({\n questionElement: questionRef,//document.querySelector('.question .card-main'),\n answerElement: document.querySelector('.answer-wrapper.selected .card-main'),\n questionInfo: question,\n answerInfo: answer,\n questionType: questionType,\n correct: correct\n })\n \n setTimeout(() => {\n checkAnswer(correct)\n setAnimating(false)\n setSelectedAnswer(null)\n setAnimationData({})\n // setAnimationStep()\n }, 2500)\n }\n\n return (\n
\n \n
\n {question && }\n
\n
\n {answers && answers.map((card,index) => {\n const selected = selectedAnswer === index\n const select = () => setSelectedAnswer(index)\n const deselect = () => setSelectedAnswer(null)\n\n return (\n \n )\n })}\n
\n {selectedAnswer !== null && selectedAnswer !== undefined && \n \n }\n
\n )\n}\n\nexport default QuizQuestion","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"color\"\n}, /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"#FCEA2B\",\n stroke: \"none\",\n points: \"35.9928,10.7363 27.7913,27.3699 9.4394,30.0436 22.7245,42.9838 19.5962,61.2637 36.0084,52.6276 52.427,61.2515 49.2851,42.9739 62.5606,30.0239 44.2067,27.3638\"\n}));\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"hair\"\n});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"skin\"\n});\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"skin-shadow\"\n});\n\nvar _ref6 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"line\"\n}, /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"none\",\n stroke: \"#000000\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeMiterlimit: 10,\n strokeWidth: 2,\n points: \"35.9928,10.7363 27.7913,27.3699 9.4394,30.0436 22.7245,42.9838 19.5962,61.2637 36.0084,52.6276 52.427,61.2515 49.2851,42.9739 62.5606,30.0239 44.2067,27.3638\"\n}));\n\nfunction SvgStar(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"emoji\",\n viewBox: \"0 0 72 72\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2, _ref3, _ref4, _ref5, _ref6);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgStar);\nexport default __webpack_public_path__ + \"static/media/star.ec2ed83b.svg\";\nexport { ForwardRef as ReactComponent };","import {ReactComponent as StarSvg} from '../img/emojis/star.svg'\nimport emptyStarIcon from '../img/emojis/emptystar.svg'\nimport React from 'react'\nimport styled, {keyframes} from 'styled-components'\nimport classNames from 'classnames'\n\nconst pop = keyframes`\n from {\n transform: scale(1);\n }\n\n 50% {\n transform: scale(2.5);\n }\n\n to {\n transform: scale(1);\n }\n`\n\nconst StyledImg = styled.img`\n width: 1.5em;\n ${props => props.unanswered && `\n opacity: 0.4;\n `}\n`\nconst StyledStar = styled(StarSvg)`\n width: 1.5em;\n\n #color polygon {\n fill: rgba(0,0,0,0);\n transition: fill 1s;\n }\n &.correct {\n animation: ${pop} 1s;\n \n #color polygon {\n transition: fill 1s;\n fill: rgb(252, 234, 43);\n }\n }\n &.wrong #color polygon {\n transition: fill 1s;\n fill: #777;\n }\n`\n\nconst Star = ({correct}) => {\n\n \n const unanswered = correct === null\n\n return (\n \n )\n}\n\n\n\nexport default Star\n","import React, { useContext, useEffect, useState } from 'react'\nimport { cards, categories } from '../data/cardInfo'\nimport _, { update } from 'lodash'\nimport classNames from 'classnames'\nimport { useHistory, useLocation, useParams } from 'react-router-dom'\nimport { Button, Wrapper } from './StartPage'\nimport { quizes, generalInfo } from '../data/quizSettings'\nimport QuizQuestion from './QuizQuestion'\nimport {QuizContext} from '../context/QuizContext'\nimport Star from './Star'\n\nconst Quiz = () => {\n\n const {difficulty} = useParams()\n const {totalQuestions, questionTypes, questionCategories, minQuestionsOfType} = quizes[difficulty]\n \n //const questions = _.take(_.shuffle(cards),totalQuestions)\n const [questions, setQuestions] = useState()\n const [answers, setAnswers] = useState()\n const [questionType, setQuestionType] = useState()\n const {setQuestionInfo, questionNumber, setQuestionNumber, result, setResult} = useContext(QuizContext)\n const [score, setScore] = useState(0)\n const history = useHistory()\n\n const checkAnswer = (correct) => {\n const newScore = correct ? (score+1) : (score)\n setScore(newScore)\n let newResult = [...result]\n //newResult[questionNumber].correct = correct\n // setResult(prevResult => {\n // return prevResult.map((v,i) => (i === questionNumber) ? correct : v)\n // })\n if (questionNumber< totalQuestions-1) {\n setQuestionNumber(questionNumber+1)\n } else {\n history.push('/result?score=' + newScore)\n }\n }\n\n const generateAnswers = (question) => {\n const cardSet = questionCategories ? (\n cards.filter(card => questionCategories.includes(card.categoryId))\n ) : (\n cards\n )\n let tempAnswers\n if (question.type === 'titleToDescription' || question.type === 'descriptionToTitle') {\n const newCardSet = cardSet.filter(card => card.categoryId === question.card.categoryId)\n tempAnswers = _.take(_.shuffle(newCardSet.filter(card => card.title !== question.card.title)),2)\n\n } else {\n tempAnswers = _.take(_.shuffle(cardSet.filter(card => card.title !== question.card.title)),2)\n }\n tempAnswers.push(question.card)\n return _.shuffle(tempAnswers)\n }\n\n const generateQuestions = () => {\n const cardSet = questionCategories ? (\n cards.filter(card => questionCategories.includes(card.categoryId))\n ) : (\n cards\n )\n const questionCards = _.take(_.shuffle(cardSet),totalQuestions)\n let tempTypes = []\n if (minQuestionsOfType) {\n const predefinedTypes = minQuestionsOfType.map(item => {\n return Array(item.count).fill(item.type)\n }).flat()\n console.log(predefinedTypes.length)\n const randomTypes = _.sampleSize(questionTypes, totalQuestions-predefinedTypes.length)\n tempTypes = _.shuffle([...predefinedTypes,...randomTypes])\n } else {\n tempTypes = [...Array(totalQuestions)].map(unused => _.sample(questionTypes))\n console.log(tempTypes, questionTypes, totalQuestions)\n }\n const questionData = _.zipWith(questionCards, tempTypes, (card,type) => ({card:card, type:type}))\n console.log(questionData)\n return questionData\n }\n\n useEffect(() => {\n //const tempQuestions = _.take(_.shuffle(cards),totalQuestions)\n const tempQuestions = generateQuestions()\n setAnswers(generateAnswers(tempQuestions[questionNumber]))\n setQuestions(tempQuestions)\n //setQuestionType(_.sample(questionTypes))\n setQuestionType(tempQuestions[questionNumber].type)\n setQuestionInfo(tempQuestions[questionNumber].card)\n setResult(Array(totalQuestions).fill(null))\n }, [])\n \n useEffect(() => {\n if (questions) {\n setAnswers(generateAnswers(questions[questionNumber]))\n //setQuestionType(_.sample(questionTypes))\n setQuestionType(questions[questionNumber].type)\n setQuestionInfo(questions[questionNumber].card)\n }\n }, [questionNumber])\n\n return (\n \n

{generalInfo.typeDescriptions[questionType]}

\n
\n
Fråga {questionNumber+1}/{totalQuestions}
\n
\n {result.map((correct,i) => {\n return \n })}\n
\n {/*
Poäng: {score}/{questionNumber}
*/}\n
\n {questions && \n \n }\n
\n )\n}\n\nexport default Quiz\n","import React from 'react'\nimport queryString from 'query-string'\nimport { useLocation } from 'react-router-dom'\nimport { ButtonList, LinkButton, Wrapper } from './StartPage'\nimport { categories } from '../data/cardInfo'\nimport smileIcon from '../img/emojis/smiley.svg'\nimport starfaceIcon from '../img/emojis/starface.svg'\nimport coolIcon from '../img/emojis/cool.svg'\nimport styled from 'styled-components'\n\nconst Emoji = styled.img`\n width: 10em;\n margin: -1rem;\n`\n\nconst ScoreText = styled.div`\n margin-bottom:1rem;\n`\nconst ResultText = styled.div`\n max-width: 20em;\n`\n\nconst QuizResult = () => {\n\n const location = useLocation()\n console.log(location)\n const {score} = queryString.parse(location.search)\n\n const result = (score >= 5) ? (\n {icon: coolIcon, text: 'Du har ju stenkoll!'}\n ) : (score >= 3) ? (\n {icon: starfaceIcon, text: 'Snyggt jobbat! Vill du testa igen?'}\n ) : (\n {icon: smileIcon, text: 'Det är klurigt det här, testa gärna igen eller träna mer på begreppen.'}\n )\n return (\n \n \n Du fick {score} poäng.\n {result.text}\n \n Tillbaka till början\n Spela igen\n \n \n )\n}\n\nexport default QuizResult\n","import React, { useState, useEffect } from 'react'\nimport styled, { css } from 'styled-components'\nimport { Button } from './StartPage'\nimport sparbankenLogo from '../img/logos/sparbanken_logo.png'\nimport riseLogo from '../img/logos/rise_logo.png'\nimport regionNorrbottenLogo from '../img/logos/region_norrbotten_logo.svg'\n\nconst Wrapper = styled.div`\n padding: 1rem 2vw;\n max-width:35em;\n\n p {\n text-align: start;\n }\n`\n\nconst FlexWrapper = styled.div`\n max-width:90vw;\n margin: auto;\n flex-wrap: wrap;\n justify-content: center;\n`\n\nconst FlexImg = styled.img`\n flex: 1 1 auto;\n min-width: 0;\n margin: 0.3rem 0.3rem;\n \n height: ${props => props.height};\n \n object-fit: contain;\n`\n\nconst BreakLink = styled.a`\n word-break: break-all;\n`\n\nconst About = () => {\n\n return (\n \n

\n Om\n

\n

\n Denna quiz är en del av workshopen och materialet \"hashtagjag\" som har tagits fram av RISE i ett projekt\n tillsammans med lärare och elever i gymnasieskolan. \n Här är det möjligt att få närmare kunskaper om några fenomen inom området \n informationspåverkan samt testa sina kunskaper. \n Quizen kan användas helt fristående eller som en del av workshopen, \n som finns att läsa mer om på RISE projektsida.\n

\n

\n Workshopen har tagits fram som ett komplement till lärande om källkritik.\n Den utgår från utmaningen att det är svårt att vara motståndskraftig mot \n illasinnade nätfenomen i sin vardagliga internetanvändning. \n

\n

\n Projektet har finansierats av Sparbanken Nord, Region Norrbotten och RISE. \n

\n \n \n \n \n \n

\n \n MSB:s handbok “Informationspåverkan – Handbok för kommunikatörer” ligger till grund \n för en stor del av materialet: https://www.msb.se/sv/publikationer/att-mota-informationspaverkan--handbok-for-kommunikatorer/ \n \n

\n

\n \n Alla emojis är designade av OpenMoji - open source-projektet för emojis och ikoner. Licens: CC BY-SA 4.0\n \n

\n\n
\n )\n}\n\nexport default About","import React from 'react'\nimport { ButtonList, LinkButton, Wrapper } from './StartPage'\nimport { categories } from '../data/cardInfo'\n\nconst QuizSelect = () => {\n\n return (\n \n

Välj svårighetsgrad

\n \n Lätt\n Svårt\n \n
\n )\n}\n\nexport default QuizSelect\n","import './App.css';\nimport { Redirect, Route, Switch } from 'react-router-dom';\n//import Sandbox from './components/Sandbox';\nimport Train from './components/Train';\nimport Quiz from './components/Quiz';\nimport QuizResult from './components/QuizResult';\nimport StartPage from './components/StartPage';\nimport styled, { css } from 'styled-components'\nimport pattern from './img/simple_pattern.svg'\nimport { cards } from './data/cardInfo';\nimport Card from './components/Card';\nimport QuizContextProvider from './context/QuizContext';\nimport About from './components/About';\nimport QuizSelect from './components/QuizSelect';\n\n\nconst Wrapper = styled.div`\n display:grid;\n place-items: center;\n height: 100%;\n`\n\nconst Container = styled.div`\n max-width: 70em;\n margin: 0 0em;\n background: white;\n //padding: 2em;\n`\n\nconst FloatingBackground = styled.div`\n position: fixed;\n top:0;\n left:0;\n background-image: url(${pattern});\n opacity: 0.3;\n \n background-attachment: fixed;\n background-size: cover;\n background-position: 0% 0%;\n z-index: -1;\n width: 100vw;\n height: 100vh;\n`\n\nfunction App() {\n \n return (\n \n
\n {/* */}\n
\n \n \n \n \n \n \n \n \n \n {/* \n \n */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n}\n\nexport default App;\n","const reportWebVitals = (onPerfEntry) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","// 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://cra.link/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.0/8 are considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\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://cra.link/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://cra.link/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 headers: { 'Service-Worker': 'script' },\n })\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('No internet connection found. App is running in offline mode.');\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\nimport * as serviceWorkerRegistration from './serviceWorkerRegistration';\nimport {BrowserRouter as Router} from 'react-router-dom'\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n);\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://cra.link/PWA\nserviceWorkerRegistration.register();\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}