1
0
Fork 0
mirror of https://github.com/voltbonn/profile-picture-generator.git synced 2024-12-23 00:05:09 +00:00
profile.volt.link/static/js/main.7c298977.chunk.js.map
2022-02-18 11:21:19 +00:00

1 line
No EOL
58 KiB
Text
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"sources":["frames lazy /^/.//.*/.png$/ groupOptions: {} namespace object","hashtags lazy /^/.//.*/.png$/ groupOptions: {} namespace object","locales lazy /^/.//.*/.ftl$/ groupOptions: {} namespace object","FrameChooser.js","Localized.js","HashtagChooser.js","Editor.js","VoltLogoPurple.svg","purpleBG.png","empty_1x1.png","App.js","reportWebVitals.js","l10n.js","index.js"],"names":["map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","keys","Object","module","exports","FrameChooser","onChange","useState","frames","setFrames","choosenFrame","setChoosenFrame","choosenFrameSRC","src","useEffect","a","all","frame_filename","default","name","new_frames","loadFrames","handleImageChoosing","useCallback","frame","className","frame_src_path","isChoosen","data-src","onClick","alt","Localized","props","elems","br","Fragment","children","withLocalization","Inner","l10n","React","useContext","FluentContext","createElement","getString","args","fallback","hashtags","split","tag","trim","filter","length","clamp","value","min","max","Math","Editor","backgroundURL","backgroundRatio","frameURL","hashtagURL","editorRef","useRef","backgroundImageRef","hammer_got_init","set_hammer_got_init","hammertime","set_hammertime","hamster","set_hamster","x","set_x","y","set_y","add_x","set_add_x","add_y","set_add_y","scale","set_scale","photoWidth","setPhotoWidth","photoHeight","setPhotoHeight","editorWidth","setEditorWidth","editorHeight","setEditorHeight","rangeMinX","set_rangeMinX","rangeMinY","set_rangeMinY","rangeMaxX","set_rangeMaxX","rangeMaxY","set_rangeMaxY","current","new_editorWidth","offsetWidth","new_editorHeight","offsetHeight","new_photoWidth","new_photoHeight","imageWidth","imageHeight","imageScale","containerWidth","containerHeight","updateRange","handleMove","event","prev_x","target","dataset","prev_y","new_x","deltaX","new_y","deltaY","isFinal","handleScale","delta","preventDefault","new_scale","element","addEventListener","Hammer","direction","Hamster","on","wheel","off","unwheel","ref","data-x","data-y","data-scale","style","width","height","transform","frameSize","UmamiLink","href","handleClick","window","umami","trackEvent","open","setTimeout","location","locales","currentLocale","onLanguageChange","setFrame","hashtag","setHashtag","originalPhoto","setOriginalPhoto","originalPhotoRation","setOriginalPhotoRation","orientation","set_orientation","set_width","set_height","cords","setCords","handleFrame","newFrame","handleHashtag","newHashtag","handleCordsChange","handleReadFile","file","reader","FileReader","onload","reader_event","img","Image","callback","view","DataView","result","getUint16","byteLength","offset","marker","getUint32","little","tags","i","readAsArrayBuffer","slice","getOrientation","new_orientation","original_ration","readAsDataURL","handleImage","files_event","files","onDrop","acceptedFiles","handleDownload","canvas","document","ctx","getContext","alpha","translate","rotate","PI","width_scaled","height_scaled","drawImage","pngUrl","toDataURL","mergeImages","purpleBG","b64","data","body","appendChild","download","click","remove","trigger_download","frameName","hashtagName","join","useDropzone","accept","maxFiles","noKeyboard","isDragActive","getRootProps","VoltLogoPurple","tabIndex","outline","type","display","startsWith","empty_1x1","entries","locale","data-locale","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","de","en","es","pt","fr","it","nl","pl","ru","_supportedLocales_","fetchMessages","path","fetch","response","text","messages","FluentResource","createMessagesGenerator","currentLocales","fetched","reduce","obj","cur","assign","generateBundles","bundle","FluentBundle","addResource","f","AppLocalizationProvider","userLocales","onLocaleChange","ReactLocalization","getDefaultBundles","bundles","setBundles","negotiateLanguages","defaultLocale","loadBundles","AppLanguageWrapper","navigator","languages","setUserLocales","setCurrentLocale","systemLocales","Array","isArray","handleLanguageChange","handleCurrentLocalesChange","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.7c298977.chunk.js","sourcesContent":["var map = {\n\t\"./0xSOM.png\": [\n\t\t50,\n\t\t13\n\t],\n\t\"./2xSOM-Blue-Green.png\": [\n\t\t51,\n\t\t14\n\t],\n\t\"./2xSOM-Red-Yellow.png\": [\n\t\t52,\n\t\t15\n\t],\n\t\"./4xSOM-Blue-Red-Yellow-Green.png\": [\n\t\t53,\n\t\t16\n\t],\n\t\"./5xSOM-Blue.png\": [\n\t\t54,\n\t\t17\n\t],\n\t\"./5xSOM-Green.png\": [\n\t\t55,\n\t\t18\n\t],\n\t\"./5xSOM-Pride.png\": [\n\t\t56,\n\t\t19\n\t],\n\t\"./5xSOM-Red.png\": [\n\t\t57,\n\t\t20\n\t],\n\t\"./5xSOM-White.png\": [\n\t\t58,\n\t\t21\n\t],\n\t\"./5xSOM-Yellow.png\": [\n\t\t59,\n\t\t22\n\t],\n\t\"./Volt-Stars.png\": [\n\t\t60,\n\t\t23\n\t],\n\t\"./btw_Meine_Stimme_Balken.png\": [\n\t\t61,\n\t\t24\n\t],\n\t\"./btw_Meine_Stimme_Sterne_bunt.png\": [\n\t\t62,\n\t\t25\n\t],\n\t\"./btw_Meine_Stimme_Sterne_lila.png\": [\n\t\t63,\n\t\t26\n\t],\n\t\"./btw_VoteVolt_Balken.png\": [\n\t\t64,\n\t\t27\n\t],\n\t\"./btw_VoteVolt_Sterne_bunt.png\": [\n\t\t65,\n\t\t28\n\t],\n\t\"./btw_VoteVolt_Sterne_lila.png\": [\n\t\t66,\n\t\t29\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 42;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./#DeineWahl.png\": [\n\t\t67,\n\t\t30\n\t],\n\t\"./#EUReform.png\": [\n\t\t68,\n\t\t31\n\t],\n\t\"./#Europa.png\": [\n\t\t69,\n\t\t32\n\t],\n\t\"./#EuropeCares.png\": [\n\t\t70,\n\t\t33\n\t],\n\t\"./#European.png\": [\n\t\t71,\n\t\t34\n\t],\n\t\"./#FutureMadeInEurope.png\": [\n\t\t72,\n\t\t35\n\t],\n\t\"./#GeneratieEuropa.png\": [\n\t\t73,\n\t\t36\n\t],\n\t\"./#GeneratieVolt.png\": [\n\t\t74,\n\t\t37\n\t],\n\t\"./#GenerationEuropa.png\": [\n\t\t75,\n\t\t38\n\t],\n\t\"./#IkStemVolt.png\": [\n\t\t76,\n\t\t39\n\t],\n\t\"./#JetztBistDuDran.png\": [\n\t\t77,\n\t\t40\n\t],\n\t\"./#JoinTheChange.png\": [\n\t\t78,\n\t\t41\n\t],\n\t\"./#RejoinEU.png\": [\n\t\t79,\n\t\t42\n\t],\n\t\"./#ValuesOverPower.png\": [\n\t\t80,\n\t\t43\n\t],\n\t\"./#Volt.png\": [\n\t\t81,\n\t\t44\n\t],\n\t\"./#Volt21.png\": [\n\t\t82,\n\t\t45\n\t],\n\t\"./#VoltEuropa.png\": [\n\t\t83,\n\t\t46\n\t],\n\t\"./#VoltForLGBTIAQ.png\": [\n\t\t84,\n\t\t47\n\t],\n\t\"./#VoltRLP.png\": [\n\t\t85,\n\t\t48\n\t],\n\t\"./#VoteVolt.png\": [\n\t\t86,\n\t\t49\n\t],\n\t\"./#WirWerdenLaut.png\": [\n\t\t87,\n\t\t50\n\t],\n\t\"./#ZukunftMadeInEurope.png\": [\n\t\t88,\n\t\t51\n\t],\n\t\"./#democracy.png\": [\n\t\t89,\n\t\t52\n\t],\n\t\"./#paneuropäisch.png\": [\n\t\t90,\n\t\t53\n\t],\n\t\"./#pragmatisch.png\": [\n\t\t91,\n\t\t54\n\t],\n\t\"./#progressiv.png\": [\n\t\t92,\n\t\t55\n\t],\n\t\"./stemvolt.nl.png\": [\n\t\t93,\n\t\t56\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 43;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./de.ftl\": [\n\t\t94,\n\t\t3\n\t],\n\t\"./en.ftl\": [\n\t\t95,\n\t\t4\n\t],\n\t\"./es.ftl\": [\n\t\t96,\n\t\t5\n\t],\n\t\"./fr.ftl\": [\n\t\t97,\n\t\t6\n\t],\n\t\"./it.ftl\": [\n\t\t98,\n\t\t7\n\t],\n\t\"./nl.ftl\": [\n\t\t99,\n\t\t8\n\t],\n\t\"./pl.ftl\": [\n\t\t100,\n\t\t9\n\t],\n\t\"./pt.ftl\": [\n\t\t101,\n\t\t10\n\t],\n\t\"./ru.ftl\": [\n\t\t102,\n\t\t11\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 48;\nmodule.exports = webpackAsyncContext;","import { useState, useEffect, useCallback } from 'react'\n\nfunction FrameChooser({ onChange }) {\n const [frames, setFrames] = useState([])\n const [choosenFrame, setChoosenFrame] = useState(null)\n\n const choosenFrameSRC = !!choosenFrame ? choosenFrame.src : null\n\n useEffect(() => {\n async function loadFrames(){\n Promise.all(\n [\n // 'btw_VoteVolt_Balken',\n // 'btw_Meine_Stimme_Balken',\n '4xSOM-Blue-Red-Yellow-Green',\n '5xSOM-Pride',\n // 'btw_VoteVolt_Sterne_bunt',\n // 'btw_Meine_Stimme_Sterne_bunt',\n 'Volt-Stars',\n // 'btw_VoteVolt_Sterne_lila',\n // 'btw_Meine_Stimme_Sterne_lila',\n '0xSOM', // SOM = Stripes of Movement\n '5xSOM-Blue',\n '5xSOM-Green',\n '5xSOM-Red',\n '5xSOM-Yellow',\n // '5xSOM-White',\n // '2xSOM-Blue-Green',\n // '2xSOM-Red-Yellow',\n ]\n .map(async frame_filename => {\n return {\n name: frame_filename,\n src: (await import(`./frames/${frame_filename}.png`)).default,\n }\n })\n )\n .then(new_frames => {\n setFrames(new_frames)\n setChoosenFrame(new_frames[0])\n })\n }\n loadFrames()\n }, [])\n\n const handleImageChoosing = useCallback(frame => {\n setChoosenFrame(frame)\n }, [setChoosenFrame])\n\n useEffect(() => {\n onChange(choosenFrame)\n }, [onChange, choosenFrame])\n\n return (\n <div className=\"FrameChooser\">\n {\n frames.map(frame => {\n const frame_src_path = frame.src\n const isChoosen = choosenFrameSRC === frame_src_path\n return <div\n key={frame_src_path}\n data-src={frame_src_path}\n className={isChoosen ? 'frame choosen' : 'frame'}\n onClick={() => handleImageChoosing(frame)}\n >\n <img alt={frame.name} src={frame_src_path} />\n </div>\n })\n }\n </div>\n )\n}\n\nexport default FrameChooser\n","import React from 'react'\nimport {\n Localized as LocalizedOriginal,\n // withLocalization,\n} from '@fluent/react'\n\nimport { FluentContext } from '../node_modules/@fluent/react/esm/context.js'\n\nconst Localized = props => (\n <LocalizedOriginal\n key={props.id}\n {...props}\n elems={{\n br: <br />,\n ...props.elems,\n }}\n >\n <React.Fragment>{props.children}</React.Fragment>\n </LocalizedOriginal>\n)\n\n// A custom withLocalization to have an empty fallback.\n// It is nearly identical to the original.\nfunction withLocalization(Inner) {\n function WithLocalization(props) {\n const l10n = React.useContext(FluentContext)\n\n const getString = (id, args, fallback) => l10n.getString(id, args, fallback || ' ')\n\n return React.createElement(Inner, { getString, ...props })\n }\n return WithLocalization\n}\n\nexport {\n withLocalization,\n Localized,\n Localized as default,\n}\n\n/*\n\nimport { Localized, withLocalization } from '../Localized/'\n\n<Localized id=\"translation_id\" />\nexport default withLocalization(componentName)\n\n\nimport Localized from '../Localized/'\n<Localized id=\"translation_id\" />\n\nimport { withLocalization } from '@fluent/react'\nexport default withLocalization(componentName)\n\n*/\n","import { useState, useEffect, useCallback } from 'react'\nimport { withLocalization } from './Localized.js'\n\nfunction HashtagChooser({ onChange, getString }) {\n const [frames, setFrames] = useState([])\n const [choosenFrame, setChoosenFrame] = useState(null)\n\n const choosenFrameSRC = !!choosenFrame ? choosenFrame.src : null\n\n let hashtags = getString('hashtags')\n\n useEffect(() => {\n async function loadFrames() {\n Promise.all(\n [\n '',\n ...(\n hashtags.split('\\n')\n .map(tag => tag.trim())\n .filter(tag => tag.length > 0)\n )\n ]\n .map(async frame_filename => {\n let src = frame_filename\n if (frame_filename !== '') {\n src = (await import(`./hashtags/${frame_filename}.png`)).default\n }\n return {\n name: frame_filename,\n src\n }\n })\n )\n .then(new_frames => {\n setFrames(new_frames)\n setChoosenFrame(new_frames[0])\n })\n }\n loadFrames()\n }, [hashtags])\n\n const handleImageChoosing = useCallback(frame => {\n setChoosenFrame(frame)\n }, [setChoosenFrame])\n\n useEffect(() => {\n onChange(choosenFrame)\n }, [onChange, choosenFrame])\n\n return (\n <div className=\"HashtagChooser\">\n {\n frames.map(frame => {\n const frame_src_path = frame.src\n const isChoosen = choosenFrameSRC === frame_src_path\n return <button\n key={frame.name}\n data-src={frame_src_path}\n className={isChoosen ? 'isInRow choosen' : 'isInRow'}\n onClick={() => handleImageChoosing(frame)}\n >\n {frame.name === '' ? getString('button_no_hashtag') : frame.name}\n </button>\n })\n }\n </div>\n )\n}\n\nexport default withLocalization(HashtagChooser)\n","import { useEffect, useRef, useState, useCallback } from 'react'\n\nimport Hammer from 'hammerjs'\nimport Hamster from 'hamsterjs'\n\nfunction updateRange(imageWidth, imageHeight, imageScale, containerWidth, containerHeight) {\n\n const rangeX = Math.max(0, (imageWidth * imageScale) - containerWidth)\n const rangeY = Math.max(0, (imageHeight * imageScale) - containerHeight)\n\n const rangeMaxX = (rangeX / 2)\n const rangeMinX = 0 - rangeMaxX\n\n const rangeMaxY = (rangeY / 2)\n const rangeMinY = 0 - rangeMaxY\n\n return {\n rangeMaxX,\n rangeMinX,\n rangeMaxY,\n rangeMinY,\n }\n}\n\nfunction clamp(value, min, max) {\n return Math.min(Math.max(min, value), max)\n}\n\n\n\nlet minScale = 1;\nlet maxScale = 8;\n\n\n\nfunction Editor({ onChange, backgroundURL, backgroundRatio, frameURL, hashtagURL }) {\n const editorRef = useRef(null)\n const backgroundImageRef = useRef(null)\n\n const [hammer_got_init, set_hammer_got_init] = useState(false)\n\n const [hammertime, set_hammertime] = useState(null)\n const [hamster, set_hamster] = useState(null)\n\n const [x, set_x] = useState(0)\n const [y, set_y] = useState(0)\n const [add_x, set_add_x] = useState(0)\n const [add_y, set_add_y] = useState(0)\n const [scale, set_scale] = useState(1)\n // const [add_scale, set_add_scale] = useState(0)\n\n const [photoWidth, setPhotoWidth] = useState(300)\n const [photoHeight, setPhotoHeight] = useState(300)\n const [editorWidth, setEditorWidth] = useState(300)\n const [editorHeight, setEditorHeight] = useState(300)\n\n const [rangeMinX, set_rangeMinX] = useState(0)\n const [rangeMinY, set_rangeMinY] = useState(0)\n const [rangeMaxX, set_rangeMaxX] = useState(0)\n const [rangeMaxY, set_rangeMaxY] = useState(0)\n\n useEffect(() => {\n if (!!onChange) {\n onChange({ x, y, scale})\n }\n }, [onChange, x, y, scale])\n\n useEffect(() => {\n if (!!editorRef && !!editorRef.current) {\n const new_editorWidth = editorRef.current.offsetWidth\n const new_editorHeight = editorRef.current.offsetHeight\n setEditorHeight(new_editorHeight)\n setEditorWidth(new_editorWidth)\n\n let new_photoWidth = 1\n let new_photoHeight = 1\n if (backgroundRatio < 1) {\n new_photoWidth = 1 / backgroundRatio\n } else if (backgroundRatio > 1) {\n new_photoHeight = 1 * backgroundRatio\n }\n\n setPhotoWidth(new_photoWidth)\n setPhotoHeight(new_photoHeight)\n }\n }, [backgroundRatio])\n\n useEffect(() => {\n const {\n rangeMinX,\n rangeMinY,\n rangeMaxX,\n rangeMaxY,\n } = updateRange(photoWidth * editorWidth, photoHeight * editorHeight, scale, editorWidth, editorHeight)\n\n set_rangeMinX(rangeMinX)\n set_rangeMinY(rangeMinY)\n set_rangeMaxX(rangeMaxX)\n set_rangeMaxY(rangeMaxY)\n }, [\n photoWidth,\n photoHeight,\n editorWidth,\n editorHeight,\n scale,\n ])\n\n useEffect(() => {\n set_x(0)\n set_y(0)\n set_add_x(0)\n set_add_y(0)\n set_scale(1)\n }, [backgroundURL])\n\n const handleMove = useCallback(event => {\n const prev_x = event.target.dataset.x * 1\n const prev_y = event.target.dataset.y * 1\n\n const new_x = clamp(prev_x + event.deltaX, rangeMinX, rangeMaxX)\n const new_y = clamp(prev_y + event.deltaY, rangeMinY, rangeMaxY)\n\n if (event.isFinal) {\n set_x(new_x || 0)\n set_y(new_y || 0)\n set_add_x(0)\n set_add_y(0)\n }else{\n set_add_x(new_x - prev_x || 0)\n set_add_y(new_y - prev_y || 0)\n }\n }, [\n rangeMinX,\n rangeMinY,\n rangeMaxX,\n rangeMaxY,\n ])\n\n const handleScale = useCallback((event, delta, deltaX, deltaY) => {\n event.preventDefault()\n\n const prev_scale = event.target.dataset.scale * 1\n const new_scale = clamp(prev_scale + delta / 200, minScale, maxScale)\n set_scale(new_scale || 1)\n\n const prev_x = event.target.dataset.x * 1\n const prev_y = event.target.dataset.y * 1\n set_x(clamp(prev_x, rangeMinX, rangeMaxX) || 0)\n set_y(clamp(prev_y, rangeMinY, rangeMaxY) || 0)\n }, [\n rangeMinX,\n rangeMinY,\n rangeMaxX,\n rangeMaxY,\n ])\n\n useEffect(() => {\n if (!hammer_got_init && !!editorRef && !!editorRef.current) {\n const element = editorRef.current\n\n element.addEventListener('mousedown', event => {\n event.preventDefault()\n // event.stopPropagation()\n }, false)\n element.addEventListener(\"touchstart\", event => {\n event.preventDefault()\n // event.stopPropagation()\n }, false)\n element.addEventListener(\"touchend\", event => {\n event.preventDefault()\n // event.stopPropagation()\n }, false)\n element.addEventListener(\"touchmove\", event => {\n event.preventDefault()\n // event.stopPropagation()\n }, false)\n\n set_hammertime(new Hammer(element, {\n direction: 'DIRECTION_ALL',\n }))\n\n set_hamster(Hamster(element))\n\n set_hammer_got_init(true)\n }\n }, [editorRef, hammer_got_init])\n\n useEffect(() => {\n if (!!hammertime && !!hamster && hammer_got_init && !!editorRef && !!editorRef.current) {\n hammertime.on('pan', handleMove)\n hamster.wheel(handleScale)\n\n return function () {\n hammertime.off('pan', handleMove)\n hamster.unwheel()\n }\n }\n }, [editorRef, handleMove, handleScale, hammer_got_init, hammertime, hamster])\n\n return (\n <div\n className=\"Editor\"\n ref={editorRef}\n data-x={x}\n data-y={y}\n data-scale={scale}\n >\n <img\n src={backgroundURL}\n ref={backgroundImageRef}\n alt=\"\"\n className=\"background\"\n style={{\n width: (photoWidth*100)+'%',\n height: (photoHeight*100)+'%',\n transform: `translate3d(calc(-50% + ${x + add_x}px), calc(-50% + ${y + add_y}px), 0) scale(${scale},${scale})`,\n }}\n />\n <img\n src={frameURL}\n alt=\"\"\n className=\"foreground\"\n />\n <img\n src={hashtagURL}\n alt=\"\"\n className=\"hashtag\"\n />\n </div>\n )\n}\n\nexport default Editor\n","export default __webpack_public_path__ + \"static/media/VoltLogoPurple.125355f6.svg\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDgAAAQ4AgMAAACRfoQcAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJUExURVAjeFAjeE8jd3Yl3xwAAAADdFJOU//+/Q3dsqEAAATsSURBVHgB7dAxAQAABAAwQtI/ipMCvi3CgiMV6NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQ4cOdOjQoUOHDh06dOjQoUOHDh06dOjQoQMdOnTo0KFDhw4dOnTo0KFDhw4dOnToQIcOHTp06NChQ4cOHTp06NChQ4cOHejQoUOHDh06dOjQoUOHDh06dOjQoUMHOnTo0KFDhw4dOnTo0KFDhw4dOnTo0IEOHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NChQIcOHTp06NChQ4cOHTp06NChQ4cOHejQoUOHDh06dOjQoUOHDh06dOjQoUMHOnTo0KFDhw4dOnTo0KFDhw4dOnTo0IEOHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06ECHDh06dOjQoUOHDh06dOjQoUOHDh060KFDhw4dOnTo0KFDhw4dOnTo0KFDhw506NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQ4cOBTp06NChQ4cOHTp06NChQ4cOHTp06ECHDh06dOjQoUOHDh06dOjQoUOHDh060KFDhw4dOnTo0KFDhw4dOnTo0KFDhw506NChQ4cOHTp06NChQ4cOHTp06NChAx06dOjQoUOHDh06dOjQoUOHDh06dOhAhw4dOnTo0KFDhw4dOnTo0KFDhw4dOtChQ4cOHTp06NChQ4cOHTp06NChQwc6dOjQoUOHDh06dOjQoUOHDh06dOjQgQ4dOnTo0KFDhw4dOnTo0KFDhw4dOnSgQ4cOHTp06NChQ4cOHTp06NChQ4cOHTx06NChQ4cOdOjQoUOHDh06dOjQoUOHDh06dOjQoQMdOnTo0KFDhw4dOnTo0KFDhw4dOnToQIcOHTp06NChQ4cOHTp06NChQ4cOHTrQoUOHDh06dOjQoUOHDh06dOjQoUOHDnTo0KFDhw4dOnTo0KFDhw4dOnTo0KEDHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NCBDh06dOjQoUOHDh06dOjQoUOHDh06dKBDhw4dOnTo0KFDhw4dOnTo0KFDhw4d6NChQ4cOHTp06NChQ4cOHTp06NChQ4cCHTp06NChQ4cOHTp06NChQ4cOHTp0oEOHDh06dOjQoUOHDh06dOjQoUOHDh3o0KFDhw4dOnTo0KFDhw4dOnTo0KFDBzp06NChQ4cOHTp06NChQ4cOHTp06NCBDh06dOjQoUOHDh06dOjQoUOHDh06dKBDhw4dOnTo0KFDhw4dOnTo0KFDhw4dxeoB30xd38yzCvgAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAALSURBVHgBY2BgAAAAAwABjPg5OgAAAABJRU5ErkJggg==\"","import { useState, useCallback } from 'react'\nimport './App.css'\nimport { useDropzone } from 'react-dropzone'\nimport mergeImages from 'merge-images'\nimport FrameChooser from './FrameChooser.js'\nimport HashtagChooser from './HashtagChooser.js'\nimport Editor from './Editor.js'\nimport VoltLogoPurple from './VoltLogoPurple.svg'\nimport purpleBG from './purpleBG.png'\nimport empty_1x1 from './empty_1x1.png'\n\nimport { withLocalization, Localized } from './Localized.js'\n\nconst frameSize = 1080\n\nfunction getOrientation(file, callback) {\n // Source: http://stackoverflow.com/a/32490603\n // (With some modifications: I just made the code fit the style-guide.)\n const reader = new FileReader()\n\n reader.onload = function (event) {\n const view = new DataView(event.target.result)\n\n if (view.getUint16(0, false) !== 0xFFD8) {\n return callback(-2)\n }\n\n const length = view.byteLength\n let offset = 2\n\n while (offset < length) {\n const marker = view.getUint16(offset, false)\n offset += 2\n\n if (marker === 0xFFE1) {\n if (view.getUint32(offset += 2, false) !== 0x45786966) {\n return callback(-1)\n }\n const little = view.getUint16(offset += 6, false) === 0x4949\n offset += view.getUint32(offset + 4, little)\n const tags = view.getUint16(offset, little)\n offset += 2\n\n for (var i = 0; i < tags; i++) {\n if (view.getUint16(offset + (i * 12), little) === 0x0112) {\n return callback(view.getUint16(offset + (i * 12) + 8, little))\n }\n }\n } else if ((marker & 0xFF00) !== 0xFF00) {\n break\n } else {\n offset += view.getUint16(offset, false)\n }\n }\n return callback(-1)\n }\n\n reader.readAsArrayBuffer(file.slice(0, 64 * 1024))\n}\n\nfunction trigger_download(name, data){\n const a = document.createElement('a')\n document.body.appendChild(a)\n // a.target = '_blank'\n a.download = name\n a.href = data\n a.click()\n a.remove()\n}\n\nfunction UmamiLink({ href, name, target, children, ...props }) {\n const handleClick = useCallback(event => {\n\n if (window.umami && name) {\n window.umami.trackEvent('A: ' + name) // Log Anker / Link\n }\n\n // follow link\n if (!(!!target)) {\n setTimeout(() => {\n window.location = href\n }, 200)\n }else{\n window.open(href, target)\n }\n\n // Prevent normal href-follow\n event.preventDefault()\n return false\n }, [href, name, target])\n\n return <a\n {...props}\n href={href}\n onClick={handleClick}\n >\n {children}\n </a>\n}\n\nfunction App({ getString, locales, currentLocale, onLanguageChange }) {\n const [frame, setFrame] = useState(null)\n const [hashtag, setHashtag] = useState(null)\n const [originalPhoto, setOriginalPhoto] = useState(null)\n const [originalPhotoRation, setOriginalPhotoRation] = useState(1)\n const [orientation, set_orientation] = useState(null)\n\n const frameURL = !!frame ? frame.src : null\n const hashtagURL = !!hashtag ? hashtag.src : null\n\n // const [combinedImage, set_combinedImage] = useState(null)\n\n const [width, set_width] = useState(0)\n const [height, set_height] = useState(0)\n\n const [cords, setCords] = useState({x:0, y:0, scale:1})\n\n const handleFrame = useCallback(newFrame => {\n setFrame(newFrame)\n }, [setFrame])\n\n const handleHashtag = useCallback(newHashtag => {\n setHashtag(newHashtag)\n }, [setHashtag])\n\n const handleCordsChange = useCallback(({x, y, scale}) => {\n setCords({ x, y, scale })\n }, [])\n\n const handleReadFile = useCallback(file => {\n if (!(!!file)) {\n return;\n }\n\n const reader = new FileReader()\n reader.onload = reader_event => {\n const img = new Image()\n img.onload = function () {\n let width, height;\n if (img.width < img.height) {\n height = (img.height / img.width) * frameSize\n width = frameSize\n } else {\n height = frameSize\n width = (img.width / img.height) * frameSize\n }\n\n getOrientation(file, new_orientation => {\n let original_ration = 1\n // use the correct image orientation\n switch (new_orientation) {\n // Source: https://stackoverflow.com/a/30242954/2387277\n // Source: https://stackoverflow.com/questions/19463126/how-to-draw-photo-with-correct-orientation-in-canvas-after-capture-photo-by-usin\n case 2:\n // horizontal flip\n original_ration = height / width\n break\n case 3:\n // 180° rotate left\n original_ration = height / width\n break\n case 4:\n // vertical flip\n original_ration = height / width\n break\n case 5:\n // vertical flip + 90 rotate right\n original_ration = width / height\n break\n case 6:\n // 90° rotate right\n original_ration = width / height\n break\n case 7:\n // horizontal flip + 90 rotate right\n original_ration = width / height\n break\n case 8:\n // 90° rotate left\n original_ration = width / height\n break\n default:\n original_ration = height / width\n break\n }\n\n set_width(width)\n set_height(height)\n setOriginalPhoto(reader_event.target.result)\n set_orientation(new_orientation)\n setOriginalPhotoRation(original_ration)\n })\n }\n img.src = reader_event.target.result\n }\n reader.readAsDataURL(file)\n }, [])\n\n const handleImage = useCallback(files_event => {\n handleReadFile(files_event.target.files[0])\n }, [handleReadFile])\n\n const onDrop = useCallback(acceptedFiles => {\n handleReadFile(acceptedFiles[0])\n }, [handleReadFile])\n\n const handleDownload = useCallback(() => {\n const img = new Image()\n img.onload = function () {\n const canvas = document.createElement('canvas')\n canvas.width = frameSize\n canvas.height = frameSize\n\n const ctx = canvas.getContext('2d', { alpha: true })\n\n // use the correct image orientation\n switch (orientation) {\n // Source: https://stackoverflow.com/a/30242954/2387277\n // Source: https://stackoverflow.com/questions/19463126/how-to-draw-photo-with-correct-orientation-in-canvas-after-capture-photo-by-usin\n case 2:\n // horizontal flip\n ctx.translate(canvas.width, 0)\n ctx.scale(-1, 1)\n break\n case 3:\n // 180° rotate left\n ctx.translate(canvas.width, canvas.height)\n ctx.rotate(Math.PI)\n break\n case 4:\n // vertical flip\n ctx.translate(0, canvas.height)\n ctx.scale(1, -1)\n break\n case 5:\n // vertical flip + 90 rotate right\n ctx.rotate(0.5 * Math.PI)\n ctx.scale(1, -1)\n break\n case 6:\n // 90° rotate right\n ctx.rotate(0.5 * Math.PI)\n ctx.translate(0, -canvas.height)\n break\n case 7:\n // horizontal flip + 90 rotate right\n ctx.rotate(0.5 * Math.PI)\n ctx.translate(canvas.width, -canvas.height)\n ctx.scale(-1, 1)\n break\n case 8:\n // 90° rotate left\n ctx.rotate(-0.5 * Math.PI)\n ctx.translate(-canvas.width, 0)\n break\n default:\n break\n }\n\n\n const width_scaled = width * cords.scale\n const height_scaled = height * cords.scale\n\n ctx.drawImage(\n img,\n cords.x * 3.5 + (frameSize - width_scaled) * 0.5,\n cords.y * 3.5 + (frameSize - height_scaled) * 0.5,\n width_scaled,\n height_scaled,\n )\n // ctx.drawImage(\n // img,\n // ((frameSize - width_scaled) * 0.5),\n // ((frameSize - height_scaled) * 0.5),\n // width_scaled,\n // height_scaled,\n // )\n\n const pngUrl = canvas.toDataURL()\n\n mergeImages([\n purpleBG,\n ...(pngUrl ? [pngUrl] : []),\n ...(frameURL ? [frameURL] : []),\n ...(hashtagURL ? [hashtagURL] : []),\n ])\n .then(b64 => {\n // set_combinedImage(b64)\n trigger_download('volt-profile-picture.png', b64)\n\n const frameName = frame.name || 'No-Frame'\n const hashtagName = hashtag.name || 'No-Hashtag'\n\n if (window.umami) {\n window.umami.trackEvent('F: ' + frameName) // Log Frame\n window.umami.trackEvent('H: ' + hashtagName) // Log Hashtag\n window.umami.trackEvent('C: ' + [frameName, hashtagName].join(' | ')) // Log Combined\n }\n })\n\n }\n img.src = originalPhoto\n }, [\n originalPhoto,\n cords.x,\n cords.y,\n cords.scale,\n orientation,\n frameURL,\n hashtagURL,\n height,\n width,\n frame,\n hashtag\n ])\n\n const { isDragActive, getRootProps } = useDropzone({\n onDrop,\n accept: 'image/*',\n maxFiles: 1,\n noKeyboard: true,\n })\n\n return (\n <div className=\"App\" {...getRootProps()}>\n <img src={VoltLogoPurple} className=\"HeaderImage\" alt={getString('alt_volt_logo')} />\n <h1><Localized id=\"title_profile_generator\" /></h1>\n\n <div className={isDragActive ? 'droparea active' : 'droparea'}>\n <Localized id=\"title_drop_photo_here\" />\n </div>\n\n <h2><Localized id=\"title_choose_photo\" /></h2>\n <p><Localized id=\"text_choose_photo_info\" /></p>\n\n <label className=\"labelButton\" tabIndex=\"0\" style={{outline:'none'}}>\n {!!originalPhoto ? <img src={originalPhoto} alt=\"Preview\" /> : null}\n <span>{!!originalPhoto ? getString('button_change_photo') : getString('button_load_photo') }</span>\n <input onChange={handleImage} type=\"file\" accept=\"image/*\" style={{display: 'none'}} />\n </label>\n\n {true || !!originalPhoto ? (<>\n <h2><Localized id=\"title_choose_frame\" /></h2>\n <FrameChooser onChange={handleFrame} />\n {\n (frameURL || '').startsWith('/static/media/btw_')\n ? null\n : <>\n <h2><Localized id=\"title_choose_hashtag\" /></h2>\n <HashtagChooser onChange={handleHashtag} />\n </>\n }\n </>) : null}\n\n {!!originalPhoto && !!frameURL ? (<>\n <h2><Localized id=\"title_reposition_photo\" /></h2>\n {/*\n <h2>Edit your Photo:</h2>\n <p>Your can reposition the image and scale it. Use pinch-to-zoom or scroll to scale.</p>\n */}\n\n <Editor\n backgroundURL={originalPhoto || empty_1x1}\n backgroundRatio={originalPhotoRation}\n frameURL={frameURL}\n hashtagURL={hashtagURL || empty_1x1}\n onChange={handleCordsChange}\n />\n\n <button onClick={handleDownload}><Localized id=\"button_download\" /></button>\n </>) : null}\n\n <footer>\n <UmamiLink name=\"imprint\" href=\"https://www.voltdeutschland.org/impressum\">\n <Localized id=\"link_imprint\" />\n </UmamiLink>\n &nbsp; • &nbsp;\n <UmamiLink name=\"privacy_policy\" href=\"https://www.voltdeutschland.org/datenschutz\">\n <Localized id=\"link_privacy_policy\" />\n </UmamiLink>\n &nbsp; • &nbsp;\n <UmamiLink name=\"source_code\" href=\"https://github.com/voltbonn/profile-picture-generator\">\n <Localized id=\"link_source_code\" />\n </UmamiLink>\n &nbsp; • &nbsp;\n <UmamiLink name=\"contact\" href=\"mailto:thomas.rosen@volteuropa.org\">\n <Localized id=\"link_app_contact\" />\n </UmamiLink>\n </footer>\n\n {\n !!locales && !!onLanguageChange\n ? <div className=\"locale_chooser\">\n {\n Object.entries(locales)\n .map(([locale, name]) => {\n return <button\n className={locale === currentLocale ? 'isInRow choosen' : 'isInRow'}\n key={locale}\n data-locale={locale}\n onClick={onLanguageChange}\n >\n {name}\n </button>\n })\n }\n </div>\n : null\n }\n </div>\n )\n}\nexport default withLocalization(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","import React, { useEffect, useState } from 'react'\n\n// https://projectfluent.org/play/\n\n// import {LocalizationProvider,Localized} from '@fluent/react' // '@fluent/react/compat'\nimport { ReactLocalization, LocalizationProvider } from '@fluent/react'\nimport { FluentBundle, FluentResource } from '@fluent/bundle'\nimport { negotiateLanguages } from '@fluent/langneg'\n\n\nexport const locales = {\n de: 'Deutsch',\n en: 'English',\n es: 'Español',\n pt: 'Português',\n fr: 'Français',\n it: 'Italiano',\n nl: 'Nederlands',\n pl: 'Polska',\n ru: 'Pусский',\n}\n\nconst _supportedLocales_ = Object.keys(locales)\nconst _defaultLocale_ = 'en'\n\n\nasync function fetchMessages(locale) {\n const path = await import('./locales/' + locale + '.ftl')\n\n const response = await fetch(path.default)\n const messages = await response.text()\n\n return { [locale]: new FluentResource(messages) }\n}\n\nfunction getDefaultBundles() {\n const bundle = new FluentBundle('')\n bundle.addResource(new FluentResource(''))\n return new ReactLocalization([bundle])\n}\n\nasync function createMessagesGenerator(currentLocales) {\n const fetched = await Promise.all(\n currentLocales.map(fetchMessages)\n )\n const messages = fetched.reduce(\n (obj, cur) => Object.assign(obj, cur)\n )\n\n return function* generateBundles() {\n for (const locale of currentLocales) {\n const bundle = new FluentBundle(locale)\n bundle.addResource(messages[locale])\n yield bundle\n }\n }\n}\n\nexport function AppLocalizationProvider({ userLocales, children, onLocaleChange }){\n const [bundles, setBundles] = useState(getDefaultBundles())\n\n useEffect(() => {\n async function loadBundles() {\n const currentLocales = negotiateLanguages(\n userLocales,\n _supportedLocales_,\n { defaultLocale: _defaultLocale_ }\n )\n\n if (!!onLocaleChange) {\n onLocaleChange(currentLocales)\n }\n\n const generateBundles = await createMessagesGenerator(currentLocales)\n setBundles( new ReactLocalization(generateBundles()) )\n }\n loadBundles()\n }, [userLocales, onLocaleChange])\n\n if (!bundles) {\n // Show a loader.\n return <div>Loading texts…</div>\n }\n\n return <LocalizationProvider l10n={bundles}>\n {children}\n </LocalizationProvider>\n}\n\n","import React, { useState, useEffect, useCallback } from 'react'\nimport ReactDOM from 'react-dom'\nimport App from './App'\nimport reportWebVitals from './reportWebVitals'\n\nimport 'intl-pluralrules'\nimport { AppLocalizationProvider, locales } from './l10n.js'\n\nfunction AppLanguageWrapper() {\n const [userLocales, setUserLocales] = useState(navigator.languages)\n const [currentLocale, setCurrentLocale] = useState(null)\n\n useEffect(() => {\n let systemLocales = navigator.languages\n if (window.umami && (!!systemLocales || Array.isArray(systemLocales))) {\n for (const locale of systemLocales) {\n window.umami.trackEvent('L: ' + locale) // Log Locale / Languages\n }\n }\n }, [])\n\n const handleLanguageChange = useCallback(event => {\n setUserLocales([event.target.dataset.locale])\n }, [setUserLocales])\n\n const handleCurrentLocalesChange = useCallback(currentLocales => {\n setCurrentLocale(currentLocales.length > 0 ? currentLocales[0] : '')\n }, [setCurrentLocale])\n\n return <AppLocalizationProvider\n key=\"AppLocalizationProvider\"\n userLocales={userLocales}\n onLocaleChange={handleCurrentLocalesChange}\n >\n <App locales={locales} currentLocale={currentLocale} onLanguageChange={handleLanguageChange} />\n </AppLocalizationProvider>\n}\n\n\nReactDOM.render(\n <React.StrictMode>\n <AppLanguageWrapper />\n </React.StrictMode>,\n document.getElementById('root')\n)\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":""}