You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
214 KiB
1 lines
214 KiB
{"version":3,"sources":["components/Class.js","DEFAULTS.js","Builds.js","skilltree/skillTree.js","skilltree/skillTreeSelector.js","skilltree/skillTreeEditor.js","TestHeader.js","components/ExpandTooltip.js","TestPanel.js","App.js","reportWebVitals.js","index.js"],"names":["Class","p","CLASSES","GetData","undefined","useIDs","class_obj","name","style","height","showLoadingAnimation","ready","type","rows","alt","src","process","icon","hideName","DisplayIcon","length","includes","axios","require","Build","PANELPATHWBUILD","build","buildData","data","JSON","parse","to","replace","id","className","build_name","creator","likes","class1","level","class2","secondaryLevel","created_on","weaponBaseName","weaponExistenceID","armor1Name","armor2Name","armor3Name","Builds","BACKENDURL","useState","builds","setBuilds","sort","setSort","filter","setFilter","filter_type","setFilterType","page","setPage","finished","setFinished","useEffect","get","encodeURI","then","catch","err","finally","value","onChange","f","currentTarget","map","item","for","placeholder","SkillTree","canvasRef","useRef","width","setWidth","setHeight","gridSizeX","gridDimensionsX","gridPaddingX","gridSizeY","Math","ceil","gridDimensionsY","halflineheight","gridPaddingY","skillLines","context","current","getContext","clearRect","fillStyle","strokeStyle","lineWidth","setLineDash","lineDash","y","line","x","split","char","padX","padY","beginPath","moveTo","lineTo","stroke","fillRect","ref","children","SkillTreeSelector","skillList","setSkillList","cl","callback","Number","position","left","ADJUSTMENT","top","defaultValue","ch","skillCallback","skill","Object","keys","class_id","SkillTreeEditor","useMemo","firstLoad","setFirstLoad","classList","setClassList","skillTreeData","setSkillTreeData","setCl","lineColor","setLineColor","setLineWidth","dimensionX","setDimensionX","dimensionY","setDimensionY","setGridSizeX","setGridSizeY","setGridPaddingX","setGridPaddingY","renderedInputs","setRenderedInputs","skillLinesTemp","setSkillLinesTemp","setSkillLines","skillData","setSkillData","message","setMessage","loading","setLoading","setHalfLineHeight","GetSkills","useCallback","filtered","found","skill_data","line_color","line_width","gridsizex","gridsizey","gridpaddingx","gridpaddingy","skillTreeString","push","repeat","controls","string","stringLine","newSkillData","s","join","newSkill","htmlFor","isNaN","c","onClick","post","pass","password","slice","str","color","setUpdate","control","i","Fragment","cookies","TestHeader","LOGGEDINUSER","LOGGEDINHASH","avatar","setAvatar","username","setUsername","recoveryhash","verified","href","ExpandTooltip","UncontrolledTooltip","fade","placement","EditBox","timer1","setTimeout","document","getElementById","focus","select","clearTimeout","edit","max","min","onKeyDown","e","key","setEdit","maxLength","maxlength","onBlur","setName","originalName","EditBoxInput","setData","prefix","PageControlButton","onPageChange","pageName","setCurrentPage","currentPage","pageDisplay","PageControl","pages","pageNames","EditableClass","setClassNameSetter","editClass","setClassSelectWindowOpen","PopupWindow","ariaHideApp","isOpen","modalOpen","onRequestClose","setModalOpen","shouldFocusAfterRender","shouldCloseOnOverlayClick","shouldCloseOnEsc","overlayClassName","title","showCloseButton","SelectorWindow","onModalOpen","itemList","setItemList","tabPage","setTabPage","sortItems","sortSelector","setSortSelector","dataFunction","filterFunction","searchFieldFunction","a","b","sortOrderFunction","displayFunction","footer","LeftButton","RightButton","ClassSelectorWindow","setTitle","setEditClass","pageSetter","dat1","class","subClass","setClassName","setSubClassName","GetSpecialWeaponName","special_name","SkillBox","gridArea","String","fromCharCode","charCodeAt","skillPointData","boxId","maxPoints","temp","points","tempData","setPoints","setSkillPointData","SkillTreeBoxes","GetHighestLevel","skillInfo","highestLevel","class_skill_id","skillTreeSkillData","splitter","numb","SkillTreeContainer","setSkillTreeSkillData","skillTreeLineColor","setSkillTreeLineColor","skillTreeLineWidth","setSkillTreeLineWidth","skillTreeDimensionX","setSkillTreeDimensionX","skillTreeDimensionY","setSkillTreeDimensionY","skillTreeGridSizeX","setSkillTreeGridSizeX","skillTreeGridSizeY","setSkillTreeGridSizeY","skillTreeGridPaddingX","setSkillTreeGridPaddingX","skillTreeGridPaddingY","setSkillTreeGridPaddingY","skillTree","FoodItem","dmg_res","hp","hp_recovery","potency","pp","pp_consumption","pp_recovery","weak_point_dmg","rarity","food_type","modifyPoints","boosts","val","stopPropagation","FoodPopupWindow","foodPointData","setFoodPointData","FOODCOUNT","reduce","total","food","foodName","add","foodMenuWindowOpen","setFoodMenuWindowOpen","prevFoodPointData","searchText","trim","toLowerCase","itemA","itemB","localeCompare","substr","lastIndexOf","popularity","TestPanel","BUILDID","useParams","history","useHistory","location","useLocation","APP_TITLE","bpGraphMax","setbpGraphMax","hpGraphMax","sethpGraphMax","ppGraphMax","setppGraphMax","atkGraphMax","setatkGraphMax","defGraphMax","setdefGraphMax","author","setAuthor","buildName","setbuildName","subclassName","setLevel","setsecondaryLevel","effectPage","setEffectPage","weaponPage","setWeaponPage","statPage","setStatPage","classSelectWindowOpen","classSkillTreeWindowOpen","setClassSkillTreeWindowOpen","treePage","setTreePage","weaponSelectWindowOpen","setWeaponSelectWindowOpen","armorSelectWindowOpen","setArmorSelectWindowOpen","augmentSelectWindowOpen","setAugmentSelectWindowOpen","selectedWeapon","setSelectedWeapon","selectedArmor1","setSelectedArmor1","selectedArmor2","setSelectedArmor2","selectedArmor3","setSelectedArmor3","armorSlotSelection","setArmorSlotSelection","classNameSetter","prevSkillPointData","setPrevSkillPointData","prevPoints","setPrevPoints","setPrevFoodPointData","BUFFS","setBUFFS","buildLoad","setBuildLoad","rarityCheck","v","bp","pointsArr","pointsDataArr","dat","weapon_type","weaponType","weapon","potential","potential_id","potential_all","potential_tooltip","pot","existence_data","Array","isArray","weapon_existence_data","weapon_type_id","weapon_id","console","log","boost_prefixes","boost_suffixes","categories","forEach","count","amount","finalObj","from","CalculateBuffs","Helmet","property","content","newSkillObj","deepCopySkills","textAlign","border","statDisplayAtk","def","weaponUp1","toFixed","weaponUp3","burnResist","shockResist","panicResist","stunResist","damageResist","background","weaponUp2","freezeResist","blindResist","poisonResist","saveObj","stringify","match","matchPath","pathname","path","exact","strict","SaveData","atk","target","description","it","ii","armor","slot","mel_dmg","rng_dmg","tec_dmg","REACT_APP_GITPOD_WORKSPACE_URL","REACT_APP_BACKENDURL","GetBackendURL","TESTMODE","Box","Table","classes","InputBox","setValue","failed","setFailed","sending","setSending","changeFunc","callback4","blurFunc","callback3","keydownFunc","callback2","disabled","lockSubmission","includeBlankValue","TableEditor","initialVals","fields","setFields","update","useReducer","state","field","submitVals","setSubmitVal","dependencies","setDependencies","importAllowed","setImportAllowed","setLockSubmission","dependency_map","cols","col","promise_list","Promise","allSettled","reader","FileReader","onload","ev","promises","result","columns","skip_empty_lines","entry","dataTypeID","readAsText","files","opacity","accept","checked","delete","alert","SubmitDeletion","scope","display","response","patch","patchValue","blur","DatabaseEditor","databases","setDatabases","backgroundColor","fontSize","lineHeight","db","label","datname","dateStr","date","Date","database","AdminPanel","setVerified","setPassword","navigationData","url","table","hr","duplicate","render","DATA","setTESTMODE","nav","EditStatBox","DamageCalculator","augmentData","setAugmentData","character","augments","armor1","armor2","armor3","searchFields","variable","equip","variance","setAugDmgVariance","rawDmg","setRawDmg","weaponTotalAtk","setWeaponTotalAtk","weaponBaseAtk","setWeaponBaseAtk","weaponEnhanceLv","setweaponEnhanceLv","dmgVariance","setDmgVariance","weaponDmgVariance","setWeaponDmgVariance","augDmgVariance","baseAtk","setBaseAtk","enemyDef","setEnemyDef","multipliers","setMultipliers","atkmult","setAtkMult","partmult","setPartMult","elementalWeaknessMult","setElementalWeaknessMult","mainClassWeaponBoost","setMainClassWeaponBoost","classSkillMult","setClassSkillMult","equipMult","setEquipMult","augmentEquipMult","setAugmentEquipMult","potencyFloorEquipMult","setPotencyFloorEquipMult","elementalWeaponEquipMult","setElementalWeaponEquipMult","critMult","setCritMult","appropriateDistance","setAppropriateDistance","foodBoost","setFoodBoost","fieldEffects","setFieldEffects","statusAilments","setStatusAilments","enemyCorrectionMult","setEnemyCorrectionMult","highLevelEnemy","setHighLevelEnemy","FormField","tooltip","VerifyLogin","LoginForm","query","urlSearchParams","URLSearchParams","window","search","fromEntries","entries","useHashQuery","rememberMe","setRememberMe","error","setError","SubmitLogin","md5","setLOGGEDINUSER","setLOGGEDINHASH","set","responseGoogle","profileObj","googleId","imageUrl","email","tokenId","userID","remove","DiscordLoginButton","checkForLogin","setCheckForLogin","code","token","REACT_APP_LOCAL_REDIRECT","marginTop","theme","clientId","buttonText","onSuccess","onFailure","cookiePolicy","RegisterForm","password2","setPassword2","setEmail","Error","App","secondaryClassName","classLv","secondaryClassLv","setstatDisplayAtk","setDATA","DATAID","setDATAID","PANELPATH","row","clear","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","rootElement","hasChildNodes","ReactDOM","hydrate"],"mappings":"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","file":"static/js/main.7fd80626.chunk.js","sourcesContent":["\nimport ReactPlaceholder from 'react-placeholder';\nimport \"react-placeholder/lib/reactPlaceholder.css\";\n\nfunction Class(p) {\n const CLASSES = p.GetData(\"class\",undefined,undefined,p.useIDs??false)\n const class_obj = CLASSES[p.name]\n return <ReactPlaceholder style={{height:8}} showLoadingAnimation ready={CLASSES!==\"no data\"} type=\"textRow\" rows={1}>{class_obj?<><img alt=\"\" src={process.env.PUBLIC_URL+class_obj.icon}/>{!p.hideName&&class_obj.name}</>:<></>}</ReactPlaceholder>\n }\n\nexport default Class;","const NICONICONII = process.env.PUBLIC_URL+\"/icons/nicodotpng.png.png\"\n\nfunction DisplayIcon(icon) {\n //console.log(icon)\n return icon&&icon.length>0?icon.includes(\"http\")?icon:process.env.PUBLIC_URL+icon:NICONICONII\n}\n\nexport {NICONICONII,DisplayIcon};","import { useEffect,useState } from 'react'\nimport Class from './components/Class';\nimport ReactPlaceholder from 'react-placeholder';\nimport \"react-placeholder/lib/reactPlaceholder.css\";\nimport {HandThumbsUp} from 'react-bootstrap-icons'\nimport { DisplayIcon } from './DEFAULTS';\nimport { HashLink as Link } from 'react-router-hash-link';\nconst axios = require('axios');\n\nfunction Build(p) {\n const {PANELPATHWBUILD} = p\n const {build} = p\n const {GetData} = p\n const buildData = build.data?build.data[0]==='{'?JSON.parse(build.data):{}:{}\n return <div>\n <br/>\n <Link to={PANELPATHWBUILD?.replace(\":BUILDID\",build.id)}>\n <div className=\"build\">\n <div className=\"buildID\">#{build.id}</div><h2 className=\"buildTitle\"> {build.build_name}</h2> <div className=\"buildAuthor\">(Created by <img className=\"buildAvatar\" alt=\"\"/>{build.creator})</div>\n <div className=\"buildLikes\"><HandThumbsUp/>{build.likes}</div>\n <br/>\n <div className=\"buildClass\"><Class GetData={GetData} name={build.class1} useIDs hideName/><sub>{buildData?.level}</sub></div>\n <div className=\"buildClass\"><Class GetData={GetData} name={build.class2} useIDs hideName/><sub>{buildData?.secondaryLevel}</sub></div>\n <div className=\"buildData\">{build.created_on}</div>\n <br/>\n <div className=\"equipPalette buildPalette\">\n <div className=\"equipPaletteSlot\"><div className={\"equipPaletteSlotWrapper r\"+GetData(\"weapon\",buildData.weaponBaseName,\"rarity\")}>\n <img className=\"buildImage\" alt=\"\" src={DisplayIcon(GetData(\"weapon_existence_data\",buildData.weaponExistenceID,\"icon\",true))}/>\n </div></div>\n <div className=\"equipPaletteSlot\"><div className={\"equipPaletteSlotWrapper r\"+GetData(\"armor\",buildData.armor1Name,\"rarity\")}>\n <img className=\"buildImage\" alt=\"\" src={DisplayIcon(GetData(\"armor\",buildData.armor1Name,\"icon\"))}/>\n </div></div>\n <div className=\"equipPaletteSlot\"><div className={\"equipPaletteSlotWrapper r\"+GetData(\"armor\",buildData.armor2Name,\"rarity\")}>\n <img className=\"buildImage\" alt=\"\" src={DisplayIcon(GetData(\"armor\",buildData.armor2Name,\"icon\"))}/>\n </div></div>\n <div className=\"equipPaletteSlot\"><div className={\"equipPaletteSlotWrapper r\"+GetData(\"armor\",buildData.armor3Name,\"rarity\")}>\n <img className=\"buildImage\" alt=\"\" src={DisplayIcon(GetData(\"armor\",buildData.armor3Name,\"icon\"))}/>\n </div></div>\n </div>\n {/*JSON.stringify(build)*/}\n </div>\n </Link>\n <br/>\n <br/>\n <hr/>\n </div>\n}\n\nfunction Builds(p) {\n\n const {GetData,BACKENDURL,PANELPATHWBUILD} = p\n const [builds,setBuilds] = useState([])\n const [sort,setSort] = useState(\"date_updated\")\n const [filter,setFilter] = useState(\"\")\n const [filter_type,setFilterType] = useState(\"author\")\n const [page,setPage] = useState(0)\n const [finished,setFinished] = useState(false)\n //const [totalPages,setTotalPages] = useState(0)\n //const [pageSelector,setPageSelector] = useState(0)\n\n\n useEffect(()=>{\n setFinished(false)\n setPage(0)\n axios.get(`${BACKENDURL}/getBuilds?sort_type=${sort}${filter_type!==\"\"?`&filter_type=${filter_type}`:\"\"}${filter_type!==\"\"?`&filter=${encodeURI(filter)}`:\"\"}${page!==0?`&offset=${page}`:\"\"}`)\n .then((data)=>{\n setBuilds(data.data)\n })\n .catch((err)=>{\n\n })\n .finally(()=>{\n setFinished(true)\n })\n },[BACKENDURL,sort,filter_type,filter,page])\n\n return <>\n <div className=\"box skillTreeBox\">\n <div className=\"boxTitleBar\">\n <h1>Builds List</h1>\n </div>\n <div className=\"itemBar\">\n <div className=\"itemBarSort\">\n Sort By:\n <select className=\"itemBarForm\" value={sort} onChange={(f)=>{setSort(f.currentTarget.value)}}>\n {[\n {name:\"Last Updated\",value:\"date_updated\"},\n {name:\"Alphabetical\",value:\"alphabetical\"},\n {name:\"Creation Time\",value:\"date_created\"},\n {name:\"Popularity\",value:\"popularity\"},\n {name:\"Editor's Choice\",value:\"editors_choice\"},\n {name:\"Author\",value:\"author\"}].map((item)=><option key={item} value={item.value}>{item.name}</option>)}\n </select>\n </div>\n <div className=\"itemBarSort\">\n <label for=\"filterForm\">Filter By: </label>\n <select className=\"itemBarForm\" id=\"filterForm\" value={filter_type} onChange={(f)=>{setFilterType(f.currentTarget.value)}}>\n {[\n {name:\"Author\",value:\"author\"},\n {name:\"Build Name\",value:\"build\"},\n {name:\"Editor's Choice\",value:\"editors_choice\"},\n {name:\"Class\",value:\"class1\"},\n {name:\"Sub-Class\",value:\"class2\"}].map((item)=><option key={item} value={item.value}>{item.name}</option>)}\n </select>\n </div>\n <div className=\"itemBarFilter\">\n {<input className=\"itemBarForm\" type=\"text\" placeholder=\"Filter\" value={filter} onChange={(f)=>{setFilter(f.currentTarget.value)}} />}\n </div>\n </div>\n <ReactPlaceholder showLoadingAnimation ready={finished} type=\"media\" rows={32}>\n {builds.map((build)=><Build PANELPATHWBUILD={PANELPATHWBUILD} GetData={GetData} build={build}/>)}\n </ReactPlaceholder>\n </div></>\n}\n\nexport default Builds;","import { useRef,useEffect,useState } from 'react';\n\nfunction SkillTree(p) {\n const canvasRef = useRef(null)\n const [width,setWidth] = useState(0)\n const [height,setHeight] = useState(0)\n \n useEffect(() => {\n setWidth(p.gridSizeX*p.gridDimensionsX+p.gridPaddingX*(p.gridDimensionsX-1))\n setHeight(p.gridSizeY*Math.ceil(p.gridDimensionsY/2)+p.halflineheight*Math.ceil((p.gridDimensionsY-1)/2)+p.gridPaddingY*(p.gridDimensionsY-1))\n }, [p.halflineheight,p.skillLines,p.gridSizeX,p.gridSizeY,p.gridPaddingX,p.gridPaddingY,p.gridDimensionsX,p.gridDimensionsY])\n\n useEffect(()=>{\n const canvas = canvasRef.current\n const context = canvas.getContext('2d')\n context.clearRect(0,0,width,height)\n context.fillStyle = 'rgba(100,100,100,0.5)'\n context.strokeStyle=p.strokeStyle\n context.lineWidth=p.lineWidth //https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineWidth\n context.setLineDash(p.lineDash) //https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash\n var y=0\n for (var line of p.skillLines) {\n var x=0\n for (var char of line.split('')) {\n var padX = x!==0?p.gridPaddingX*x:0\n var padY = y!==0?p.gridPaddingY*y:0\n switch (char) {\n case \"─\":context.beginPath();context.moveTo(x*p.gridSizeX+(padX)-p.gridPaddingX,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX+p.gridPaddingX,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.stroke();break;\n case \"│\":context.beginPath();context.moveTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)-p.gridPaddingY);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+p.gridSizeY+p.gridPaddingY);context.stroke();break;\n case \"└\":context.beginPath();context.moveTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)-p.gridPaddingY);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX+p.gridPaddingX,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.stroke();break;\n case \"┌\":context.beginPath();context.moveTo(x*p.gridSizeX+(padX)+p.gridSizeX+p.gridPaddingX,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+p.gridSizeY+p.gridPaddingY);context.stroke();break;\n case \"┘\":context.beginPath();context.moveTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)-p.gridPaddingY);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)-p.gridPaddingX,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.stroke();break;\n case \"┐\":context.beginPath();context.moveTo(x*p.gridSizeX+(padX)-p.gridPaddingX,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+p.gridSizeY+p.gridPaddingY);context.stroke();break;\n case \"├\":context.beginPath();context.moveTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)-p.gridPaddingY);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX+p.gridPaddingX,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.stroke();context.beginPath();context.moveTo(x*p.gridSizeX+(padX)+p.gridSizeX+p.gridPaddingX,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+p.gridSizeY+p.gridPaddingY);context.stroke();break;\n case \"┤\":context.beginPath();context.moveTo(x*p.gridSizeX+(padX)-p.gridPaddingX,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+p.gridSizeY+p.gridPaddingY);context.stroke();context.beginPath();context.moveTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)-p.gridPaddingY);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)-p.gridPaddingX,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.stroke();break;\n case \"┬\":context.beginPath();context.moveTo(x*p.gridSizeX+(padX)-p.gridPaddingX,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+p.gridSizeY+p.gridPaddingY);context.stroke();context.beginPath();context.moveTo(x*p.gridSizeX+(padX)+p.gridSizeX+p.gridPaddingX,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+p.gridSizeY+p.gridPaddingY);context.stroke();break;\n case \"┴\":context.beginPath();context.moveTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)-p.gridPaddingY);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX+p.gridPaddingX,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.stroke();context.beginPath();context.moveTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)-p.gridPaddingY);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)-p.gridPaddingX,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.stroke();break;\n case \"┼\":context.beginPath();context.moveTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)-p.gridPaddingY);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX/2,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+p.gridSizeY+p.gridPaddingY);context.moveTo(x*p.gridSizeX+(padX)-p.gridPaddingX,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.lineTo(x*p.gridSizeX+(padX)+p.gridSizeX+p.gridPaddingX,Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY)+(y%2===1?p.halflineheight:p.gridSizeY)/2);context.stroke();break;\n case \"□\":context.clearRect(x*p.gridSizeX+(padX), Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY), p.gridSizeX, y%2===1?p.halflineheight:p.gridSizeY);context.fillRect(x*p.gridSizeX+(padX), Math.ceil(y/2)*p.gridSizeY+Math.ceil((y-1)/2)*p.halflineheight+(padY), p.gridSizeX, y%2===1?p.halflineheight:p.gridSizeY);break;\n default:\n }\n x++\n }\n y++\n }\n },[width,height,p.gridSizeX,p.gridSizeY,p.gridPaddingX,p.gridPaddingY,p.lineDash,p.lineWidth,p.skillLines,p.strokeStyle,p.halflineheight])\n \n return <canvas\n width={width}\n height={height} ref={canvasRef} style={p.style} className={p.className}>{p.children}</canvas>\n}\n\nexport {SkillTree}","import { useEffect, useState } from 'react'\n\nfunction SkillTreeSelector(p) {\n\n const { GetData } = p\n\n const [skillList,setSkillList] = useState([])\n\n useEffect(()=>{\n setSkillList(GetData(\"class_skill\"))\n },[p.cl,GetData])\n\n return <>\n <select onChange={(f)=>{p.callback(f.currentTarget.value,Number(p.x),Number(p.y))}} style={{position:\"absolute\",left:p.ADJUSTMENT[0]+(p.x*p.gridSizeX+p.padX+p.gridSizeX/2),top:p.ADJUSTMENT[1]+((p.y/2)*p.gridSizeY+(p.y/2-1)*p.halflineheight+p.padY+(p.y===0?p.halflineheight:p.gridSizeY)/2)}} value={p.defaultValue}>\n {[' ','─','│','□','┌','└','┐','┘','┬','┴','├','┤','┼'].map((ch)=>\n <option value={ch} key={ch}>{ch}</option>)\n }\n </select>\n {p.defaultValue==='□'&&<select style={{width:\"64px\",position:\"absolute\",left:p.ADJUSTMENT[0]+(p.x*p.gridSizeX+p.padX+p.gridSizeX/2),top:p.ADJUSTMENT[1]+((p.y/2)*p.gridSizeY+(p.y/2-1)*p.halflineheight+p.padY+(p.y===0?p.halflineheight:p.gridSizeY)/2)+28}} onChange={(f)=>{p.skillCallback(p.x,p.y,f.currentTarget.value)}} value={p.skill.split(\",\")[2]}>\n {[\"\",...Object.keys((skillList)).filter((skill)=>skillList[skill].class_id===p.cl)].map((skill)=><option key={skill} value={(skillList[skill])?skillList[skill].id:\"\"}>{(skillList[skill])?skillList[skill].name:\"\"}</option>)}\n </select>}\n </>\n\n} \n\nexport {SkillTreeSelector}","import { SkillTree } from \"./skillTree\";\nimport React, { useEffect,useState,useMemo,useCallback } from \"react\";\nimport { SkillTreeSelector } from \"./skillTreeSelector\";\nimport axios from \"axios\";\n\nfunction SkillTreeEditor(p) {\n const { GetData } = p\n\n const ADJUSTMENT = useMemo(()=>[-32,32],[])\n\n const [firstLoad,setFirstLoad] = useState(true)\n\n const [classList,setClassList] = useState({})\n const [skillTreeData,setSkillTreeData] = useState({})\n const [cl,setCl] = useState(-1)\n const [lineColor,setLineColor] = useState(\"#000000\")\n const [lineWidth,setLineWidth] = useState(3)\n const [dimensionX,setDimensionX] = useState(6)\n const [dimensionY,setDimensionY] = useState(6)\n const [gridSizeX,setGridSizeX] = useState(80)\n const [gridSizeY,setGridSizeY] = useState(60)\n const [gridPaddingX,setGridPaddingX] = useState(10)\n const [gridPaddingY,setGridPaddingY] = useState(10)\n const [renderedInputs,setRenderedInputs] = useState([])\n const [skillLinesTemp,setSkillLinesTemp] = useState([])\n const [skillLines,setSkillLines] = useState([])\n const [skillData,setSkillData] = useState([])\n const [message,setMessage] = useState(\"\")\n const [loading,setLoading] = useState(false)\n const [halflineheight,setHalfLineHeight] = useState(60)\n\n const GetSkills = useCallback((x,y)=>{\n var filtered = skillData.filter((skill)=>Number(skill.split(\",\")[0])===Number(x)&&Number(skill.split(\",\")[1])===Number(y))\n if (filtered.length>0) {\n return filtered[0]\n } else {\n return \"\"\n }\n },[skillData])\n\n function SaveSkillTrees() {\n axios.post(p.BACKENDURL+\"/saveskilltree\",{\n pass:p.password,\n data:skillLines.slice(0,dimensionY).map((str)=>str.slice(0,dimensionX)).join(','),\n skill_data:skillData.join(';'),\n line_color:lineColor,\n line_width:lineWidth,\n gridsizex:gridSizeX,\n gridsizey:gridSizeY,\n gridpaddingx:gridPaddingX,\n gridpaddingy:gridPaddingY,\n halflineheight:halflineheight,\n class_id:cl\n })\n .then((data)=>{\n if (data.data===\"OK!\") {\n setMessage(<span style={{color:\"green\"}}>{\"Successfully saved skill tree for \"+p.GetData(\"class\",undefined,undefined,true)[cl].name+\"!\"}</span>)\n p.setUpdate(true)\n }\n })\n .catch((err)=>{\n setMessage(<span style={{color:\"red\"}}>{err.message}</span>)\n })\n .then(()=>{\n setLoading(false)\n })\n }\n\n useEffect(()=>{\n setClassList(GetData(\"class\",undefined,undefined,true))\n setSkillTreeData(GetData(\"skill_tree_data\",undefined,undefined,true))\n },[GetData])\n\n useEffect(()=>{\n var keys = Object.keys(skillTreeData)\n var found = false\n for (var id of keys) {\n //console.log(cl+\"/\"+skillTreeData[id].class_id)\n if (Number(skillTreeData[id].class_id)===Number(cl)) {\n var data = skillTreeData[id].data?.split(',')\n var skill = skillTreeData[id].skill_data?.split(';')\n setSkillLinesTemp(data)\n setSkillData(skill)\n setDimensionX(data[0].length)\n setDimensionY(data.length)\n setLineColor(skillTreeData[id].line_color)\n setLineWidth(skillTreeData[id].line_width)\n setGridSizeX(skillTreeData[id].gridsizex)\n setGridSizeY(skillTreeData[id].gridsizey)\n setGridPaddingX(skillTreeData[id].gridpaddingx)\n setGridPaddingY(skillTreeData[id].gridpaddingy)\n setHalfLineHeight(skillTreeData[id].halflineheight)\n found=true\n }\n }\n if (!found) {\n setSkillLinesTemp([])\n setSkillData([])\n setDimensionX(6)\n setDimensionY(6)\n }\n },[skillTreeData,cl])\n\n useEffect(()=>{\n if (firstLoad) {\n setCl(Number(Object.keys(classList)[0]))\n setFirstLoad(false)\n }\n },[classList,firstLoad])\n\n useEffect(()=>{\n var skillTreeString = [...skillLinesTemp]\n\n while (skillTreeString.length<dimensionY) {\n skillTreeString.push(\" \".repeat(dimensionX))\n }\n\n for (var line=0;line<skillTreeString.length;line++) {\n if (skillTreeString[line].length<dimensionX) {\n skillTreeString[line]+=\" \".repeat(dimensionX-skillTreeString[line].length)\n }\n }\n setSkillLines(skillTreeString)\n },[dimensionX,dimensionY,skillLinesTemp])\n\n useEffect(()=>{\n var controls = []\n for (var y=0;y<skillLines.length;y++) {\n for (var x=0;x<skillLines[y].length;x++) {\n var padX = x!==0?gridPaddingX*x:0\n var padY = y!==0?gridPaddingY*y:0\n if (y<dimensionY&&x<dimensionX) {\n controls.push(<SkillTreeSelector GetData={GetData} cl={Number(cl)} defaultValue={skillLines[y][x]} callback={(char,x,y)=>{\n var string = [...skillLines]\n var stringLine = string[y].split('')\n var newSkillData = [...skillData]\n stringLine[x] = char\n if (char!==\"□\") {\n for (var s in newSkillData) {\n var split = newSkillData[s].split(',')\n if (Number(split[0])===Number(x)&&Number(split[1])===Number(y)) {\n newSkillData[s]=\"\"\n setSkillData(newSkillData)\n break;\n }\n }\n }\n string[y] = stringLine.join('')\n setSkillLinesTemp(string)\n }\n } skill={GetSkills(x,y)} skillCallback={(x,y,skill)=>{\n var newSkillData = [...skillData]\n var found=false\n var newSkill = x+\",\"+y+\",\"+skill\n for (var s in newSkillData) {\n var split = newSkillData[s].split(',')\n if (Number(split[0])===Number(x)&&Number(split[1])===Number(y)) {\n newSkillData[s]=newSkill\n found=true\n break;\n }\n }\n if (!found) {\n newSkillData.push(newSkill)\n }\n setSkillData(newSkillData)\n }} ADJUSTMENT={ADJUSTMENT} x={x} y={y} gridSizeX={gridSizeX} gridSizeY={gridSizeY} padX={padX} padY={padY} halflineheight={halflineheight}/>)\n }\n }\n }\n setRenderedInputs(controls)\n },[skillLines,gridSizeX,gridSizeY,gridPaddingX,gridPaddingY,cl,dimensionY,dimensionX,skillData,halflineheight,GetData,ADJUSTMENT,GetSkills])\n\n return <>\n {loading?<img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/>:<>\n <h2>{message}</h2>\n <label htmlFor=\"classSelect\">Class Select:</label><select id=\"classSelect\" value={Number.isNaN(Number(cl))?\"?\":cl} onChange={(f)=>{setCl(Number(f.currentTarget.value))}}>\n <option value=\"\"></option>\n {Object.keys(classList).map((c)=><option key={classList[c].name} value={c}>{c+\" - \"+classList[c].name}</option>)}\n </select>\n <br/>\n <br/>\n {p.GetData(\"class\",undefined,undefined,true)[cl]?.name&&<button onClick={()=>{\n setLoading(true)\n SaveSkillTrees()\n }}>{\"Save \"+p.GetData(\"class\",undefined,undefined,true)[cl]?.name+\" Skill Tree\"}</button>}\n <div style={{width:\"800px\",position:\"relative\",left:\"300px\"}}>\n <SkillTree strokeStyle={lineColor} lineWidth={lineWidth} lineDash={[]}\n gridDimensionsX={dimensionX} gridDimensionsY={dimensionY} gridSizeX={gridSizeX} gridSizeY={gridSizeY} gridPaddingX={gridPaddingX} gridPaddingY={gridPaddingY}\n skillLines={skillLines} halflineheight={halflineheight}\n />\n {renderedInputs.map((control,i)=><React.Fragment key={i}>{control}</React.Fragment>)}\n <br/>\n <hr/>\n <br/>\n <label htmlFor=\"lineColor\">Line Color:</label><input type=\"color\" id=\"lineColor\" value={lineColor} onChange={(f)=>{setLineColor(f.currentTarget.value)}}/><br/>\n <label htmlFor=\"lineWidth\">Line Width:</label><input type=\"number\" id=\"lineWidth\" value={lineWidth} onChange={(f)=>{setLineWidth(f.currentTarget.value)}}/><br/>\n <label htmlFor=\"gridSizeX\">Grid Size X:</label><input type=\"number\" id=\"gridSizeX\" value={dimensionX} onChange={(f)=>{setDimensionX(f.currentTarget.value)}}/><br/>\n <label htmlFor=\"gridSizeY\">Grid Size Y:</label><input type=\"number\" id=\"gridSizeY\" value={dimensionY} onChange={(f)=>{setDimensionY(f.currentTarget.value)}}/><br/>\n <label htmlFor=\"subrowHeight\">Sub-row Height:</label><input type=\"number\" id=\"subrowHeight\" value={halflineheight} onChange={(f)=>{setHalfLineHeight(f.currentTarget.value)}}/><br/>\n <label htmlFor=\"boxSizeX\">Box Size X:</label><input type=\"number\" id=\"boxSizeX\" value={gridSizeX} onChange={(f)=>{setGridSizeX(f.currentTarget.value)}}/><br/>\n <label htmlFor=\"boxSizeY\">Box Size Y:</label><input type=\"number\" id=\"boxSizeY\" value={gridSizeY} onChange={(f)=>{setGridSizeY(f.currentTarget.value)}}/><br/>\n <label htmlFor=\"gridPaddingX\">Grid Padding X:</label><input type=\"number\" id=\"gridPaddingX\" value={gridPaddingX} onChange={(f)=>{setGridPaddingX(f.currentTarget.value)}}/><br/>\n <label htmlFor=\"gridPaddingY\">Grid Padding Y:</label><input type=\"number\" id=\"gridPaddingY\" value={gridPaddingY} onChange={(f)=>{setGridPaddingY(f.currentTarget.value)}}/><br/>\n\n </div></>}\n </>\n}\n\nexport {SkillTreeEditor}","import React, { useEffect,useState } from 'react';\nimport { DisplayIcon } from './DEFAULTS';\nimport ReactPlaceholder from 'react-placeholder';\nimport \"react-placeholder/lib/reactPlaceholder.css\";\n\nimport { HashLink as Link } from 'react-router-hash-link';\n\n\nconst axios = require('axios');\nconst cookies = require('cookie-handler');\n\nfunction TestHeader(p) {\n\n const {BACKENDURL,LOGGEDINUSER,LOGGEDINHASH} = p;\n\n const [avatar,setAvatar] = useState(undefined);\n const [username,setUsername] = useState(undefined);\n const [loading,setLoading] = useState(true)\n\n useEffect(()=>{\n axios.post(BACKENDURL+\"/validUser\",{\n username:LOGGEDINUSER,\n password:LOGGEDINHASH,\n recoveryhash:cookies.get(\"userID\")\n })\n .then((data)=>{\n if (data.data.verified) {\n setAvatar(data.data.avatar)\n setUsername(LOGGEDINUSER)\n }\n })\n .catch((err)=>{})\n .finally(()=>{\n setLoading(false)\n })}\n ,[BACKENDURL,LOGGEDINUSER,LOGGEDINHASH])\n\n return (\n <header>\n <div className=\"headerWrapper\">\n <div className=\"logo\"><a href=\".\"><img alt=\"\" src={process.env.PUBLIC_URL + '/icons/logo_sm.png'} /> NGS<span>planner</span></a></div>\n <div className=\"navigation\"><ul>\n <li className=\"headerMenuItem\"><Link to={process.env.PUBLIC_URL+\"/builds\"}>Builds</Link></li>\n <li className=\"headerMenuItem\"><a href=\".\">Guides</a></li>\n <li className=\"headerMenuItem\"><a href=\".\">Blog</a></li>\n <li className=\"headerMenuItem\"><a href=\".\">About</a></li></ul>\n <section className=\"miniNav\"><a href=\".\">☰</a></section>\n </div>\n <div className=\"rightNav\">\n <section className=\"loginNav\"><a href=\".\"><ReactPlaceholder style={{width:240,height:42}} showLoadingAnimation ready={!loading} type=\"media\" rows={1}><img alt=\".\" src={DisplayIcon(avatar)} /> {username??\"Guest\"}   <span className=\"dotMenu\">···</span></ReactPlaceholder></a></section>\n <section className=\"miniNav\"><a href=\".\"><ReactPlaceholder style={{width:42,height:42}} showLoadingAnimation ready={!loading} type=\"round\" rows={1}><img alt=\".\" src={DisplayIcon(avatar)} /></ReactPlaceholder></a></section>\n </div>\n </div>\n </header>\n )\n}\n\nexport default TestHeader;","import { UncontrolledTooltip } from \"reactstrap\"\n\nfunction ExpandTooltip(p) {\n\n\treturn <UncontrolledTooltip className=\"xTooltip\" fade={true} placement=\"bottom\" {...p}>\n {p.children}\n </UncontrolledTooltip>\n}\n\nexport {ExpandTooltip}","import {PencilFill} from 'react-bootstrap-icons'\nimport React, { useEffect,useState } from 'react';\nimport Modal from 'react-modal'\nimport { DisplayIcon } from './DEFAULTS';\nimport { ExpandTooltip } from './components/ExpandTooltip';\nimport { SkillTree } from './skilltree/skillTree';\nimport axios from 'axios';\nimport Helmet from 'react-helmet'\nimport ReactPlaceholder from 'react-placeholder';\nimport \"react-placeholder/lib/reactPlaceholder.css\";\nimport Class from './components/Class';\n\nimport { useLocation,useHistory,useParams,matchPath } from 'react-router'\n\n//Helper variables for Weapon selector with structure: [weapon_type,weapon,potential,potential_tooltip,weapon_existence_data]\nconst WEAPON_WEAPONTYPE=0;const WEAPON_WEAPON=1;const WEAPON_POTENTIAL=2;const WEAPON_POTENTIAL_TOOLTIP=3;const WEAPON_EXISTENCE_DATA=4;\n\nfunction EditBox(p) {\n\tuseEffect(()=>{\n\t\tvar timer1 = setTimeout(()=>{\n document.getElementById(\"editBoxInput\").focus()\n document.getElementById(\"editBoxInput\").select()\n },100)\n\t\treturn () => {\n\t\t\tclearTimeout(timer1);\n\t\t};\n\t},[p.edit])\n\treturn <input id=\"editBoxInput\" type={p.type} max={p.type===\"number\"?20:undefined} min={p.type===\"number\"?1:undefined} onKeyDown={(e)=>{\n\t\tif (e.key===\"Enter\") {p.setEdit(false)}\n\t\telse if (e.key===\"Escape\") {p.setEdit(false)}\n\t}}\tmaxLength={p.maxlength?p.maxlength:20} onBlur={()=>{p.setEdit(false)}} value={p.value} onChange={(f)=>{f.currentTarget.value.length>0?p.setName(f.currentTarget.value):p.setName(p.originalName)}}>\n\t</input>\n}\n\nfunction EditBoxInput(p) {\n\tconst [edit,setEdit] = useState(false)\n\t\n\tuseEffect(()=>{\n\t\tif (p.callback) {\n\t\t\tp.callback()\n\t\t}\n\t},[edit,p])\n\t\n\treturn <>\n\t\t<div className={edit?\"editBoxActive\":\"editBox\"} onClick={(f)=>{setEdit(true)}}>\n\t\t\t{edit?\n\t\t\t<EditBox edit={edit} maxlength={p.maxlength} type={p.type} setEdit={setEdit} originalName={p.data} setName={p.setData} value={p.data}/>\n\t\t\t:<>{p.prefix}{p.data}</>}\n\t\t</div>\n\t</>\n}\n\nfunction PageControlButton(p) {\n\treturn <li onClick={()=>{if (p.onPageChange) {p.onPageChange(p.pageName)} p.setCurrentPage(p.page)}} className={(p.currentPage===p.page)?\"selected\":\"unselected\"}>{p.pageDisplay?p.pageDisplay[p.page-1]:p.pageName?p.pageName:p.page}</li>\n}\n\nfunction PageControl(p) {\n\tvar pages = []\n\tfor (var i=0;i<p.pages;i++) {\n\t\tpages.push(<PageControlButton onPageChange={p.onPageChange} pageDisplay={p.pageDisplay} pageName={p.pageNames?p.pageNames[i]:undefined} currentPage={p.currentPage} setCurrentPage={p.setCurrentPage} page={i+1}/>)\n\t}\n if (p.children!==undefined) {\n pages.push(<li className=\"pageControlDetails\">{p.children}</li>)\n }\n //console.log(JSON.stringify(p.children))\n\treturn pages.length>0&&<ul className=\"boxmenu\">\n\t\t\t{pages.map((page,i)=>{return <React.Fragment key={i}>{page}</React.Fragment>})}\n\t\t</ul>\n}\n\nfunction EditableClass(p){\n\treturn <><div className=\"editClass\" onClick={()=>{p.setClassNameSetter(p.editClass);p.setClassSelectWindowOpen(true)}}><Class GetData={p.GetData} name={p.name}/>\n\t</div>\n\t</>\n}\n\nfunction PopupWindow(p) {\n\n\treturn <Modal ariaHideApp={false} isOpen={p.modalOpen} onRequestClose={()=>{p.setModalOpen(false)}} shouldFocusAfterRender={true} shouldCloseOnOverlayClick={true} shouldCloseOnEsc={true} className=\"modal\" overlayClassName=\"modalOverlay\">\n <div className=\"box boxModal noSelect\">\n <div className=\"boxTitleBar\">\n <h1>{p.title}</h1>\n {p.showCloseButton&&<div className=\"boxExit\" onClick={()=>{p.setModalOpen(false)}}></div>}\n </div>\n <PageControl onPageChange={p.onPageChange} pages={p.pageNames?p.pageNames.length:0} pageNames={p.pageNames} currentPage={p.page} setCurrentPage={p.setPage}/>\n \n {p.children}\n </div>\n\t</Modal>\n}\n\nfunction SelectorWindow(p) {\n\n const { onModalOpen } = p\n\n const [itemList,setItemList] = useState([])\n\n const [tabPage,setTabPage] = useState(1)\n const [sortSelector,setSortSelector] = useState(p.sortItems?p.sortItems[0]:\"\")\n const [filter,setFilter] = useState(\"\")\n \n useEffect(()=>{\n if (p.dataFunction) {\n setItemList(p.dataFunction())\n }\n },[p])\n\n useEffect(()=>{\n if (onModalOpen) {\n onModalOpen(setTabPage)\n }\n },[onModalOpen])\n \n return <PopupWindow page={tabPage} setPage={setTabPage} modalOpen={p.modalOpen} setModalOpen={p.setModalOpen} showCloseButton={true} title={p.title}\n pageNames={p.pageNames}\n filter={true}\n onPageChange={p.onPageChange}\n >\n {(p.sortItems||p.filter)&&<div className=\"itemBar\">\n <div className=\"itemBarSort\">\n {p.sortItems&&<select className=\"itemBarForm\" value={sortSelector} onChange={(f)=>{setSortSelector(f.currentTarget.value)}}>\n {p.sortItems.map((item)=><option key={item} value={item}>{item}</option>)}\n </select>}\n </div>\n <div className=\"itemBarFilter\">\n {p.filter?<input className=\"itemBarForm\" type=\"text\" placeholder=\"Filter\" value={filter} onChange={(f)=>{setFilter(f.currentTarget.value)}} />:<></>}\n </div>\n </div>\n }\n <div className=\"modalItemListContainer customScrollbar\">\n {p.filter?itemList.filter((item)=>p.filterFunction(tabPage,item)).filter((item)=>p.searchFieldFunction(filter,item)).sort((a,b)=>p.sortOrderFunction(sortSelector,a,b)).map((item,i)=><React.Fragment key={i}>{p.displayFunction(item)}</React.Fragment>):itemList.map((item,i)=><React.Fragment key={i}>{p.displayFunction(item)}</React.Fragment>)}\n {p.children}\n </div>\n {p.footer}\n </PopupWindow>\n}\n\nfunction LeftButton(p){\n\treturn <span {...p} className=\"skillLeftButton\">\n </span>\n}\n\nfunction RightButton(p){\n\treturn <span {...p} className=\"skillRightButton\">\n </span>\n}\nfunction ClassSelectorWindow(p) {\n const [title,setTitle] = useState(\"Select Main Class\")\n useEffect(()=>{\n setTitle((p.editClass)?\"Select Sub Class\":\"Select Main Class\")\n },[p.editClass])\n return <SelectorWindow title={title} modalOpen={p.modalOpen} setModalOpen={p.setModalOpen} GetData={p.GetData}\n pageNames={[\"Main Class\",\"Sub-Class\"]}\n onPageChange={(page)=>{\n if (page===\"Main Class\") {\n p.setEditClass(0)\n } else {\n p.setEditClass(1)\n }\n }}\n onModalOpen={(pageSetter)=>{\n pageSetter((p.editClass)?2:1)\n }}\n dataFunction={() => {\n var dat1 = p.GetData(\"class\")\n return Object.keys(dat1)\n }\n }\n displayFunction={(key) => {\n return <li className={p.class===key?\"treeListMain\":p.subClass===key?\"treeListSub\":\"\"} onClick={() => {if (p.editClass===0){p.setClassName(key);p.setSubClassName(p.subClass===key?p.class:p.subClass)}else{p.setSubClassName(key);p.setClassName(p.class===key?p.subClass:p.class)}; p.setModalOpen(false) }}><img alt=\"\" src={DisplayIcon(p.GetData(\"class\", key, \"icon\"))} /> {p.GetData(\"class\", key, \"name\")}</li>\n }}\n/>\n}\n\nfunction GetSpecialWeaponName(item) {\n return item[WEAPON_EXISTENCE_DATA]!==undefined?(item[WEAPON_EXISTENCE_DATA].special_name?.length>0)?item[WEAPON_EXISTENCE_DATA].special_name:(item[WEAPON_WEAPON].name+\" \"+item[WEAPON_WEAPONTYPE].name):<><span className=\"\">Select Weapon</span></>\n}\n\nfunction ConvertCoordinate(x,y) {\n return (String.fromCharCode(Number(x)+'a'.charCodeAt(0)))+(y/2+1);\n}\n\nfunction SkillBox(p) {\n return <div className={p.className} style={{ gridArea: ConvertCoordinate(Number(p.skill[0]),Number(p.skill[1])) }}><img className=\"skillIcon\" alt=\"\" src={DisplayIcon(p.GetData(\"class_skill\",p.skill[2],\"icon\",true))} /><span className=\"skillAllocated\">{(p.skillPointData[p.page-1][p.boxId]?p.skillPointData[p.page-1][p.boxId]:0)+\"/\"+p.maxPoints}</span><em className=\"skillName\">{typeof p.GetData(\"class_skill\",p.skill[2],\"name\",true)===\"string\"&&p.GetData(\"class_skill\",p.skill[2],\"name\",true)}</em><div className=\"skillButtons\">\n <LeftButton onClick={()=>{\n var temp=[...p.points]\n var tempData=[...p.skillPointData]\n if (!tempData[p.page-1][p.boxId]) {\n tempData[p.page-1][p.boxId]=0\n }\n if (tempData[p.page-1][p.boxId]>0) {\n temp[p.page-1]-=1\n tempData[p.page-1][p.boxId]-=1\n p.setPoints(temp)\n p.setSkillPointData(tempData)\n }}}/>\n <RightButton onClick={()=>{\n var temp=[...p.points]\n var tempData=[...p.skillPointData]\n if (!tempData[p.page-1][p.boxId]) {\n tempData[p.page-1][p.boxId]=0\n }\n if (tempData[p.page-1][p.boxId]<p.maxPoints) {\n temp[p.page-1]+=1\n tempData[p.page-1][p.boxId]+=1\n p.setPoints(temp)\n p.setSkillPointData(tempData)\n }}}/></div></div>\n}\n\nfunction SkillTreeBoxes(p) {\n\n function GetHighestLevel(skill) {\n var skillInfo = Object.keys(p.GetData(\"class_skill_data\"))\n var highestLevel = 0\n for (var i=0;i<skillInfo.length;i++) {\n var skillData = p.GetData(\"class_skill_data\",skillInfo[i])\n if (skillData&&Number(skillData.class_skill_id)===Number(skill)&&skillData.level>highestLevel) {\n highestLevel=skillData.level\n }\n }\n return highestLevel\n }\n\n function isLocked(skill) {\n return false\n }\n\n return <>\n {p.skillTreeSkillData&&p.skillTreeSkillData.map((skill,i)=>{\n var splitter = skill.split(\",\")\n return splitter[0]!==\"\"&&splitter[1]!==\"\"&&splitter[2]!==\"\"&&<SkillBox key={i} className={isLocked(splitter[2])?\"skillLocked\":p.skillPointData[p.page-1][splitter[0]+\"_\"+splitter[1]]===GetHighestLevel(splitter[2])?\"skillMaxed\":p.skillPointData[p.page-1][splitter[0]+\"_\"+splitter[1]]>0?\"skillActive\":\"\"} boxId={splitter[0]+\"_\"+splitter[1]} skillPointData={p.skillPointData} setSkillPointData={p.setSkillPointData} page={p.page} cl={p.cl} maxPoints={GetHighestLevel(splitter[2])} points={p.points} setPoints={p.setPoints} GetData={p.GetData} skill={splitter.map((numb)=>Number(numb))}/>\n })}\n </>\n}\n\nfunction SkillTreeContainer(p){\n\n const { GetData } = p\n\n const [skillTreeData,setSkillTreeData] = useState([])\n const [skillTreeSkillData,setSkillTreeSkillData] = useState([])\n const [skillTreeLineColor,setSkillTreeLineColor] = useState(\"\")\n const [skillTreeLineWidth,setSkillTreeLineWidth] = useState(3)\n const [skillTreeDimensionX,setSkillTreeDimensionX] = useState(6)\n const [skillTreeDimensionY,setSkillTreeDimensionY] = useState(6)\n const [skillTreeGridSizeX,setSkillTreeGridSizeX] = useState(171)\n const [skillTreeGridSizeY,setSkillTreeGridSizeY] = useState(148)\n const [skillTreeGridPaddingX,setSkillTreeGridPaddingX] = useState(10)\n const [skillTreeGridPaddingY,setSkillTreeGridPaddingY] = useState(48)\n const [halflineheight,setHalfLineHeight] = useState(60)\n\n useEffect(()=>{\n if (Object.keys(GetData(\"skill_tree_data\")).length>1) {\n for (var skillTree of GetData(\"skill_tree_data\")) {\n if (skillTree.class_id===GetData(\"class\",p.cl,'id')) {\n var data = skillTree.data.split(\",\")\n var skillData = skillTree.skill_data.split(\";\")\n setSkillTreeData(data)\n setSkillTreeSkillData(skillData)\n setSkillTreeLineColor(skillTree.line_color)\n setSkillTreeLineWidth(skillTree.line_width)\n setSkillTreeDimensionX(data[0].length)\n setSkillTreeDimensionY(data.length)\n setSkillTreeGridSizeX(skillTree.gridsizex)\n setSkillTreeGridSizeY(skillTree.gridsizey)\n setSkillTreeGridPaddingX(skillTree.gridpaddingx)\n setSkillTreeGridPaddingY(skillTree.gridpaddingy)\n setHalfLineHeight(skillTree.halflineheight)\n break;\n }\n }\n }\n },[p.cl,GetData])\n\n return <div className=\"skillTreeContainer customScrollbar\">\n <div style={{ position: \"relative\" }}>\n {<SkillTree style={{ position: \"absolute\" }} strokeStyle={skillTreeLineColor} lineWidth={skillTreeLineWidth} lineDash={[]}\n gridDimensionsX={skillTreeDimensionX} gridDimensionsY={skillTreeDimensionY} gridSizeX={skillTreeGridSizeX} gridSizeY={skillTreeGridSizeY} gridPaddingX={skillTreeGridPaddingX} gridPaddingY={skillTreeGridPaddingY}\n skillLines={skillTreeData} halflineheight={halflineheight}\n />}\n <div className=\"skillTreeGrid\">\n <SkillTreeBoxes skillPointData={p.skillPointData} setSkillPointData={p.setSkillPointData} page={p.page} points={p.points} cl={p.cl} setPoints={p.setPoints} GetData={p.GetData} skillTreeSkillData={skillTreeSkillData}/>\n </div>\n </div>\n</div>\n}\n\nfunction FoodItem(p) {\n const {/*description,*/dmg_res,/*editors_choice,*/\n hp,hp_recovery,icon,/*id,*/name,/*popularity,*/potency,\n pp,pp_consumption,pp_recovery,weak_point_dmg,rarity,\n food_type} = p.item\n const {modifyPoints} = p\n const [points,setPoints] = useState(p.points)\n const boosts = [\n {\n name:\"Damage Resistance\",\n icon:\"\",\n val:dmg_res\n },\n {\n name:\"Health\",\n icon:\"\",\n val:hp\n },\n {\n name:\"Health Recovery\",\n icon:\"\",\n val:hp_recovery\n },\n {\n name:\"Potency\",\n icon:\"\",\n val:potency\n },\n {\n name:\"Damage Resistance\",\n icon:\"\",\n val:dmg_res\n },\n {\n name:\"PP Boost\",\n icon:\"\",\n val:pp\n },\n {\n name:\"PP Consumption Reduction\",\n icon:\"\",\n val:pp_consumption\n },\n {\n name:\"PP Recovery\",\n icon:\"\",\n val:pp_recovery\n },\n {\n name:\"Weak Point Damage\",\n icon:\"\",\n val:weak_point_dmg\n }]\n \n useEffect(()=>{\n setPoints(p.points)\n },[p.points])\n\n return <div onClick={(e)=>{e.stopPropagation();modifyPoints(name,1)}} className={`itemWrapper${points>0?\"Active\":\"\"} r${rarity}`}>\n <div className=\"itemImgWrapper\">\n <img alt=\"\" src={DisplayIcon(icon)} />\n </div>\n <div className={`itemNameWrapper ${food_type}`}>\n {name}\n </div>\n <div className=\"itemRarityWrapper\"> </div>\n <div className=\"itemPropertiesWrapper\">\n {boosts.filter((val)=>val.val).map((val=><span key={val.name} className={val.icon}></span>))}\n </div>\n <div className=\"itemControlsWrapper\">\n <span onClick={(e)=>{e.stopPropagation();modifyPoints(name,-1)}}>-</span>\n <span>{points}</span>\n <span onClick={(e)=>{e.stopPropagation();modifyPoints(name,1)}}>+</span>\n </div></div>\n}\n\nfunction FoodPopupWindow(p) {\n\n const {GetData,foodPointData,setFoodPointData} = p\n\n const MAX_SELECTED=10;\n const FOODCOUNT = Object.keys(foodPointData).reduce((total,food)=>foodPointData[food]+total,0)\n\n function modifyPoints(foodName,add) {\n var temp = {...foodPointData}\n var total = FOODCOUNT\n if (add+total<=10&&add+total>=0) {\n temp[foodName] = Math.min(Math.max((temp[foodName]??0)+add,0),MAX_SELECTED)\n setFoodPointData(temp)\n }\n }\n\n return <SelectorWindow title={\"Food Menu\"} modalOpen={p.foodMenuWindowOpen} setModalOpen={p.setFoodMenuWindowOpen} GetData={p.GetData} \n footer={\n <>\n <div className=\"foodPoints\">\n <div>Foods in Recipe</div>\n <div>{FOODCOUNT}</div>\n </div>\n <div className=\"foodConfirm\">\n <div onClick={()=>{p.setFoodMenuWindowOpen(false)}}>Confirm</div>\n <div onClick={()=>{p.setFoodMenuWindowOpen(false);p.setFoodPointData(p.prevFoodPointData)}}>Cancel</div>\n </div>\n </>}\n sortItems={[\"Standard Sort\",\"Alphabetical\",\"Food Name\",\"Food Type\",\"Popularity\"]}\n filter={true}\n dataFunction={()=>{\n return Object.keys(GetData(\"food\")).map((key)=>GetData(\"food\")[key])\n }}\n filterFunction={(page,item)=>item}\n searchFieldFunction={(searchText,item)=>searchText.length>0?item.name.trim().toLowerCase().includes(searchText.toLowerCase()):true}\n sortOrderFunction={(sort,itemA,itemB)=>{\n switch (sort) {\n case \"Standard Sort\":return itemB.id-itemA.id\n case \"Alphabetical\":return itemA.name.localeCompare(itemB.name)\n case \"Food Name\":return itemA.name.substr(itemA.name.lastIndexOf(\" \")).localeCompare(itemB.name.substr(itemB.name.lastIndexOf(\" \")))\n case \"Food Type\":return itemA.food_type.localeCompare(itemB.food_type)!==0?itemA.food_type.localeCompare(itemB.food_type):itemA.name.substr(itemA.name.lastIndexOf(\" \")).localeCompare(itemB.name.substr(itemB.name.lastIndexOf(\" \")))\n case \"Popularity\":return itemB.popularity-itemA.popularity\n default:return 0\n } \n }}\n displayFunction={(item)=>{\n return <FoodItem key={item.name} modifyPoints={modifyPoints} points={foodPointData[item.name]??0} item={item}/>\n }}\n >\n </SelectorWindow>\n}\n\nfunction TestPanel(p) {\n\n\nlet { BUILDID } = useParams()\nlet history = useHistory();\nlet location = useLocation();\n\nconst { GetData,LOGGEDINUSER,LOGGEDINHASH,BACKENDURL,APP_TITLE } = p\n\nconst [bpGraphMax,setbpGraphMax] = useState(1000)\nconst [hpGraphMax,sethpGraphMax] = useState(1000)\nconst [ppGraphMax,setppGraphMax] = useState(1000)\nconst [atkGraphMax,setatkGraphMax] = useState(1000)\nconst [defGraphMax,setdefGraphMax] = useState(1000)\n\nconst [author,setAuthor] = useState(\"Player\")\nconst [buildName,setbuildName] = useState(\"Character\")\nconst [className,setClassName] = useState(\"Ranger\")\nconst [subclassName,setSubClassName] = useState(\"Force\")\nconst [level,setLevel] = useState(20)\nconst [secondaryLevel,setsecondaryLevel] = useState(20)\n\nconst [effectPage,setEffectPage] = useState(1)\nconst [weaponPage,setWeaponPage] = useState(1)\nconst [statPage,setStatPage] = useState(1)\n\nconst [foodMenuWindowOpen,setFoodMenuWindowOpen] = useState(false)\nconst [classSelectWindowOpen,setClassSelectWindowOpen] = useState(false)\nconst [classSkillTreeWindowOpen,setClassSkillTreeWindowOpen] = useState(false)\nconst [treePage,setTreePage] = useState(1)\nconst [weaponSelectWindowOpen,setWeaponSelectWindowOpen] = useState(false)\nconst [armorSelectWindowOpen,setArmorSelectWindowOpen] = useState(false)\nconst [augmentSelectWindowOpen,setAugmentSelectWindowOpen] = useState(false)\n\n\nconst [selectedWeapon,setSelectedWeapon] = useState([])\nconst [selectedArmor1,setSelectedArmor1] = useState([])\nconst [selectedArmor2,setSelectedArmor2] = useState([])\nconst [selectedArmor3,setSelectedArmor3] = useState([])\nconst [armorSlotSelection,setArmorSlotSelection] = useState(1)\n\nconst [classNameSetter,setClassNameSetter] = useState(0)\n\nconst [points,setPoints] = useState([])\nconst [skillPointData,setSkillPointData] = useState([])\nconst [prevSkillPointData,setPrevSkillPointData] = useState([])\nconst [prevPoints,setPrevPoints] = useState([])\n\nconst [foodPointData,setFoodPointData] = useState({})\nconst [prevFoodPointData,setPrevFoodPointData] = useState({})\n\nconst [BUFFS,setBUFFS] = useState({})\n\nconst [buildLoad,setBuildLoad] = useState(false)\n\nfunction SaveData() {\n var saveObj = {\n level:level,\n secondaryLevel:secondaryLevel,\n weaponBaseName:selectedWeapon[WEAPON_WEAPON]?.name,\n weaponType:selectedWeapon[WEAPON_WEAPONTYPE]?.name,\n weaponExistenceID:selectedWeapon[WEAPON_EXISTENCE_DATA]?.id,\n armor1Name:selectedArmor1?.name,\n armor2Name:selectedArmor2?.name,\n armor3Name:selectedArmor3?.name,\n points:points,\n skillPointData:skillPointData,\n foodPointData:foodPointData,\n }\n axios.post(BACKENDURL+\"/submitBuild\",{\n id:BUILDID,\n username:LOGGEDINUSER,\n pass:LOGGEDINHASH,\n creator:author,\n build_name:buildName,\n class1:className,\n class2:subclassName,\n data:JSON.stringify(saveObj),})\n .then((data)=>{\n const match=matchPath(location.pathname,{\n path:p.path,\n exact:true,\n strict:false\n })\n history.push(match.path.replace(\"/:BUILDID\",\"\")+\"/\"+data.data.id)\n })\n}\n\nfunction rarityCheck(v) {\n return v!==undefined?v.rarity!==undefined?\" r\"+v.rarity:\"\":\"\"\n}\n\nuseEffect(()=>{\n if (p.bp>1000) {\n setbpGraphMax(3000)\n sethpGraphMax(3000)\n setppGraphMax(3000)\n setatkGraphMax(3000)\n setdefGraphMax(3000)\n } else {\n setbpGraphMax(1000)\n sethpGraphMax(1000)\n setppGraphMax(1000)\n setatkGraphMax(1000)\n setdefGraphMax(1000)\n }\n},[p.bp]) \n\nuseEffect(()=>{\n var keys = Object.keys(GetData(\"class\"))\n var pointsArr = []\n var pointsDataArr = []\n for (var i=0;i<keys.length;i++) {\n pointsArr.push(0)\n pointsDataArr.push({})\n if (keys[i]===className) {\n setTreePage(i+1)\n }\n }\n setPoints(pointsArr)\n setSkillPointData(pointsDataArr)\n},[className,GetData])\n\nuseEffect(()=>{\n if (BUILDID) {\n setBuildLoad(false)\n axios.get(BACKENDURL+\"/getBuild?id=\"+BUILDID)\n .then((data)=>{\n setAuthor(data.data.creator)\n setbuildName(data.data.build_name)\n setClassName(GetData(\"class\",data.data.class1,\"name\",true))\n setSubClassName(GetData(\"class\",data.data.class2,\"name\",true))\n var dat = JSON.parse(data.data.data)\n setLevel(dat.level)\n setsecondaryLevel(dat.secondaryLevel)\n setPoints(dat.points)\n setSkillPointData(dat.skillPointData)\n setFoodPointData(dat.foodPointData??{})\n var dat1=p.GetData(\"weapon_existence_data\")\n var weapon_type=GetData(\"weapon_type\",dat.weaponType)\n var weapon=GetData(\"weapon\",dat.weaponBaseName)\n var potential=GetData(\"potential\",weapon.potential_id,undefined,true)\n var potential_all=GetData(\"potential_data\")\n var potential_tooltip=[]\n for (var pot in potential_all) {\n if (pot.includes(potential.name)) {\n potential_tooltip.push(p.GetData(\"potential_data\",pot))\n }\n }\n var existence_data = Array.isArray(dat1)?dat1.filter((weapon_existence_data)=>weapon_existence_data.weapon_type_id===weapon_type.id&&weapon_existence_data.weapon_id===weapon.id)[0]:undefined\n //console.log(JSON.stringify([weapon_type,weapon,potential,potential_tooltip,existence_data]))\n setSelectedWeapon([weapon_type,weapon,potential,potential_tooltip,existence_data])\n setSelectedArmor1(GetData(\"armor\",dat.armor1Name))\n setSelectedArmor2(GetData(\"armor\",dat.armor2Name))\n setSelectedArmor3(GetData(\"armor\",dat.armor3Name))\n })\n .catch((err)=>{\n console.log(err.message)\n })\n .finally(()=>{\n setBuildLoad(true)\n })\n } else {\n setBuildLoad(true)\n }\n},[BUILDID,GetData,BACKENDURL,p])\n\nuseEffect(()=>{\n\n function CalculateBuffs(foodPointData) {\n const boost_prefixes = {\n pp_consumption:\"Rich\",\n pp_recovery:\"Light\",\n weak_point_dmg:\"Crisp\",\n hp_recovery:\"Robust\",\n }\n const boost_suffixes = {\n potency:\"Meat\",\n pp:\"Fruit\",\n dmg_res:\"Vegetable\",\n hp:\"Seafood\",\n }\n\n var categories= {}\n Object.keys(GetData(\"food_mult\",\"0\")).filter((key)=>key!==\"id\"&&key!==\"amount\").forEach((key)=>{categories[key]={count:0}})\n Object.keys(foodPointData).map((key)=>{return {...GetData(\"food\",key),amount:foodPointData[key]}}).forEach((item)=>{\n for (var key of Object.keys(item)) {\n if (key in categories && item[key]) {\n categories[key].count+=item.amount\n }\n }\n })\n var finalObj = {}\n Object.keys(categories).filter((key)=>categories[key].count>0).forEach((key)=>finalObj[key]={...categories[key],from:boost_prefixes[key]??boost_suffixes[key]})\n return finalObj\n }\n\n\n setBUFFS(CalculateBuffs(foodPointData)??[])\n},[foodPointData,GetData])\n\n//console.log(p.GetData(\"class\",p.className,\"icon\"))\n\nfunction deepCopySkills(skillData) {\n var newSkillObj = []\n for (var data of skillData) {\n newSkillObj.push({...data})\n }\n return newSkillObj\n}\n\n return (<>\n \n <Helmet>\n <title>{`${buildName} by ${author} - ${APP_TITLE}`}</title>\n <meta property=\"og:title\" content=\"If this works then this is awesome\"/>\n <meta property=\"og:description\" content=\"If it doesn't work I hate life.\"/>\n <meta property=\"og:image\" content=\"http://projectdivar.com:3001/favicon.ico\"/>\n </Helmet>\n<div className=\"main\">\n <div className=\"containerA\">\n\n <div className=\"box basicInfoBox\">\n\n <div className=\"boxTitleBar\">\n <h1>Basic Information</h1></div>\n<ReactPlaceholder showLoadingAnimation ready={buildLoad} type=\"media\" rows={12}>\n <div className=\"basicInfo\">\n<div style={{gridArea:\"author\"}}>Author</div>\n<div style={{gridArea:\"build\"}}>Build Name</div>\n<div style={{gridArea:\"class\"}} onClick={()=>{setClassSelectWindowOpen(true)}}>Class</div>\n<div style={{gridArea:\"subclass\"}} onClick={()=>{setPrevPoints([...points]);setPrevSkillPointData(deepCopySkills(skillPointData));setClassSkillTreeWindowOpen(true)}}>Sub-Class</div>\n\n<div style={{gridArea:\"class2\"}}><EditableClass editClass={0} setClassNameSetter={setClassNameSetter} GetData={p.GetData} setClassName={setClassName} name={className} setClassSelectWindowOpen={setClassSelectWindowOpen}></EditableClass></div>\n<div style={{gridArea:\"subclass2\"}}><EditableClass editClass={1} setClassNameSetter={setClassNameSetter} GetData={p.GetData} setClassName={setSubClassName} name={subclassName} setClassSelectWindowOpen={setClassSelectWindowOpen}></EditableClass></div>\n\n<div style={{gridArea:\"player\",textAlign:\"right\"}}><EditBoxInput setData={setAuthor} data={author}/></div>\n<div style={{gridArea:\"character\",textAlign:\"right\"}}><EditBoxInput setData={setbuildName} data={buildName}/></div>\n<div style={{gridArea:\"classlv\",textAlign:\"right\"}}><EditBoxInput prefix=\"Lv.\" setData={setLevel} data={level} type=\"number\"/></div> \n<div style={{gridArea:\"subclasslv\",textAlign:\"right\"}}><EditBoxInput prefix=\"Lv.\" setData={setsecondaryLevel} data={secondaryLevel} type=\"number\"/></div>\n </div>\n <div className=\"statsInfo\">\n<div style={{gridArea:\"bp\"}}>Battle Power</div>\n<div style={{gridArea:\"hp\"}}>HP</div>\n<div style={{gridArea:\"pp\"}}>PP</div>\n<div style={{gridArea:\"atk\"}}>Attack</div>\n<div style={{gridArea:\"def\"}}>Defense</div>\n<div style={{gridArea:\"wepUp\"}}>Weapon Up</div>\n<div style={{gridArea:\"res\"}}>Ailment Resist.</div>\n<div style={{gridArea:\"dmgRes\",border:\"0\"}}>Damage Resist.</div>\n\n<div style={{gridArea:\"bp2\"}}>{p.bp}</div>\n<div style={{gridArea:\"hp2\"}}>{p.hp}</div>\n<div style={{gridArea:\"pp2\"}}>{p.pp}</div>\n<div style={{gridArea:\"atk2\"}}>{p.statDisplayAtk}</div>\n<div style={{gridArea:\"def2\"}}>{p.def}</div>\n<div style={{gridArea:\"wepUp2\",color:\"#ffb74c\"}}><img alt=\"\" src={process.env.PUBLIC_URL+\"/icons/mel.png\"} /> +{(p.weaponUp1*100).toFixed(1)}%<br /><img alt=\"\" src={process.env.PUBLIC_URL+\"/icons/tec.png\"} /> +{(p.weaponUp3*100).toFixed(1)}%</div>\n<div style={{gridArea:\"res2\"}}><img alt=\"\" src={process.env.PUBLIC_URL+\"/icons/status/burn.png\"} /> {(p.burnResist*100).toFixed(1)}%<br /><img alt=\"\" src={process.env.PUBLIC_URL+\"/icons/status/shock.png\"} /> {(p.shockResist*100).toFixed(1)}%<br /><img alt=\"\" src={process.env.PUBLIC_URL+\"/icons/status/panic.png\"} /> {(p.panicResist*100).toFixed(1)}%<br /><img alt=\"\" src={process.env.PUBLIC_URL+\"/icons/status/stun.png\"} /> {(p.stunResist*100).toFixed(1)}%<br /></div>\n<div style={{gridArea:\"dmgRes2\",border:\"0\"}}>{(p.damageResist*100).toFixed(1)}%</div>\n\n<div style={{gridArea:\"bpGraph\"}}><div className=\"barGraph\"><span className=\"barOverlay\" style={{background:\"linear-gradient(90deg,transparent 0% \"+((p.bp/bpGraphMax)*100)+\"%,black \"+((p.bp/bpGraphMax)*100)+\"%)\"}}> </span></div></div>\n<div style={{gridArea:\"hpGraph\"}}><div className=\"barGraph\"><span className=\"barOverlay\" style={{background:\"linear-gradient(90deg,transparent 0% \"+((p.hp/hpGraphMax)*100)+\"%,black \"+((p.hp/hpGraphMax)*100)+\"%)\"}}> </span></div></div>\n<div style={{gridArea:\"ppGraph\"}}><div className=\"barGraph\"><span className=\"barOverlay\" style={{background:\"linear-gradient(90deg,transparent 0% \"+((p.pp/ppGraphMax)*100)+\"%,black \"+((p.pp/ppGraphMax)*100)+\"%)\"}}> </span></div></div>\n<div style={{gridArea:\"atkGraph\"}}><div className=\"barGraph\"><span className=\"barOverlay\" style={{background:\"linear-gradient(90deg,transparent 0% \"+((p.statDisplayAtk/atkGraphMax)*100)+\"%,black \"+((p.statDisplayAtk/atkGraphMax)*100)+\"%)\"}}> </span></div></div>\n<div style={{gridArea:\"defGraph\"}}><div className=\"barGraph\"><span className=\"barOverlay\" style={{background:\"linear-gradient(90deg,transparent 0% \"+((p.def/defGraphMax)*100)+\"%,black \"+((p.def/defGraphMax)*100)+\"%)\"}}> </span></div></div>\n<div style={{gridArea:\"wepUp3\",color:\"#ffb74c\"}} ><div><img alt=\"\" src={process.env.PUBLIC_URL+\"/icons/rng.png\"} /> +{(p.weaponUp2*100).toFixed(1)}%</div></div>\n<div style={{gridArea:\"res3\"}}><div><img alt=\"\" src={process.env.PUBLIC_URL+\"/icons/status/freeze.png\"} /> {(p.freezeResist*100).toFixed(1)}%<br /><img alt=\"\" src={process.env.PUBLIC_URL+\"/icons/status/blind.png\"} /> {(p.blindResist*100).toFixed(1)}%<br /><img alt=\"\" src={process.env.PUBLIC_URL+\"/icons/status/poison.png\"} /> {(p.poisonResist*100).toFixed(1)}%<br /></div></div>\n\n </div><section className=\"saveControls\">\n <button onClick={()=>{SaveData()}}>Save Build</button>\n </section>\n \n \n </ReactPlaceholder>\n </div>\n\n\n <div className=\"box\">\n <div className=\"boxTitleBar\">\n <h1>Equip</h1></div>\n <div className=\"equipPalette\">\n <div onClick={()=>{setWeaponSelectWindowOpen(true)}} className=\"equipPaletteSlot\"><h3>Weapons</h3><div className={\"equipPaletteSlotWrapper\"+rarityCheck(selectedWeapon[WEAPON_WEAPON])}><ReactPlaceholder style={{width:52,height:48}} showLoadingAnimation ready={buildLoad} type=\"rect\"><span>1</span><img alt=\"\" className=\"r4\" src={DisplayIcon(selectedWeapon[WEAPON_EXISTENCE_DATA]?.icon)} /></ReactPlaceholder></div></div>\n <div onClick={()=>{setArmorSlotSelection(1);setArmorSelectWindowOpen(true)}} className={\"equipPaletteSlot\"+rarityCheck(selectedArmor1)}><h3>Armor 1</h3><div className=\"equipPaletteSlotWrapper\"><ReactPlaceholder style={{width:52,height:48}} showLoadingAnimation ready={buildLoad} type=\"rect\"><img alt=\"\" className=\"r3\" src={DisplayIcon(selectedArmor1.icon)} /></ReactPlaceholder></div></div>\n <div onClick={()=>{setArmorSlotSelection(2);setArmorSelectWindowOpen(true)}} className={\"equipPaletteSlot\"+rarityCheck(selectedArmor2)}><h3>Armor 2</h3><div className=\"equipPaletteSlotWrapper\"><ReactPlaceholder style={{width:52,height:48}} showLoadingAnimation ready={buildLoad} type=\"rect\"><img alt=\"\" className=\"r3\" src={DisplayIcon(selectedArmor2.icon)} /></ReactPlaceholder></div></div>\n <div onClick={()=>{setArmorSlotSelection(3);setArmorSelectWindowOpen(true)}} className={\"equipPaletteSlot\"+rarityCheck(selectedArmor3)}><h3>Armor 3</h3><div className=\"equipPaletteSlotWrapper\"><ReactPlaceholder style={{width:52,height:48}} showLoadingAnimation ready={buildLoad} type=\"rect\"><img alt=\"\" className=\"r3\" src={DisplayIcon(selectedArmor3.icon)} /></ReactPlaceholder></div></div>\n </div>\n </div>\n\n\n\n\n </div>\n <div className=\"containerB\">\n <div className=\"box equipWindow\">\n <div className=\"boxTitleBar\">\n <h1>Equipped Weapon</h1></div>\n <ReactPlaceholder showLoadingAnimation ready={GetData(p)!==\"no data\"&&buildLoad} type=\"media\" rows={12}>\n <div className=\"equipNameWrapper\">\n <div className=\"equipName\"><h2 className=\"rifle\">{GetSpecialWeaponName(selectedWeapon)}</h2></div>\n <div className=\"equipEnhancement editOverlayWrapper\">\n <div className=\"editOverlay\"><p><PencilFill /> Edit</p></div>\n +40</div>\n </div>\n <PageControl pages={3} currentPage={weaponPage} setCurrentPage={setWeaponPage}><PencilFill /> Edit Details</PageControl>\n {weaponPage === 1 ?\n\n<>\n<div className=\"itemDetailsGridTop\">\n<div className={\"itemDetailsIcon editOverlayWrapper\"+rarityCheck(selectedWeapon[WEAPON_WEAPON])} onClick={()=>{setWeaponSelectWindowOpen(true)}}>\n<div className=\"editOverlay\"><p><PencilFill /> Edit</p></div>\n<img alt=\"\" src={DisplayIcon(selectedWeapon[WEAPON_EXISTENCE_DATA]?.icon)} /></div>\n<div className=\"itemDetailsProperties\">\n<div className=\"itemDetailsPropertiesWrapper\">\n\n<div style={{gridArea:\"rarity\"}}>Rarity</div>\n<div style={{gridArea:\"stars\"}}className={rarityCheck(selectedWeapon[WEAPON_WEAPON])}><div className=\"itemRarityWrapper\">-</div></div>\n\n<div style={{gridArea:\"attack\"}}>Attack</div>\n<div style={{gridArea:\"attackDisplay\"}}>282</div>\n\n<div style={{gridArea:\"element\"}}>Element</div>\n<div style={{gridArea:\"elementDisplay\"}}>-</div>\n\n<div style={{gridArea:\"conditions\"}}>Equip Conditons</div>\n<div style={{gridArea:\"conditionsDisplay\"}}>Lv.15 (Current Lv.20)</div>\n\n</div></div>\n</div>\n<div className=\"itemDetailsGridBottom editOverlayWrapper\">\n<div className=\"editOverlay\" onClick={()=>{setAugmentSelectWindowOpen(true)}}><p><PencilFill /> Edit</p></div>\n<div className=\"itemPotential\"><span className=\"pot\">Soulspring Unit Lv.3</span></div>\n<div className=\"itemFixa\"><span className=\"fixa\">Fixa Attack Lv.3</span></div>\n<div className=\"itemDetailsAugment\">\n<span className=\"aug\">Augment</span>\n<div className=\"itemDetailsAugmentWrapper\">\n\n<div><span>Precision III</span></div>\n<div></div>\n<div></div>\n<div></div>\n\n</div>\n</div>\n</div>\n\n\n</>\n:weaponPage === 2 ?\n<div className=\"statsDetails\">\n<div style={{gridArea:\"enhance1\"}}>Enhancement Lv.</div>\n<div style={{gridArea:\"variance1\"}}>Damage Adj.</div>\n<div style={{gridArea:\"weaponup\"}}>Weapon Up</div>\n<div style={{gridArea:\"ailment1\"}}>Ailment Resist.</div>\n<div style={{gridArea:\"class1\"}}>Available Classes</div>\n<div style={{gridArea:\"mw1\"}}>Multi-weapon</div>\n\n<div style={{gridArea:\"enhance2\"}}>40</div>\n<div style={{gridArea:\"variance2\"}}>75.0% ~ 100%</div>\n<div style={{gridArea:\"mel\"}} className=\"mel\">9.9%</div>\n<div style={{gridArea:\"ailment2\"}}><span className=\"burn\">0.0%</span><br /><span className=\"blind\">0.0%</span><br /><span className=\"stun\">0.0%</span></div>\n<div style={{gridArea:\"class2\"}}><img alt=\"\" src={DisplayIcon(\"icons/ra.png\")} /> <img alt=\"\" src={DisplayIcon(\"icons/UINGSClassGu.png\")} /></div>\n<div style={{gridArea:\"mw2\"}}><img alt=\"\" src={DisplayIcon(\"icons/NGSUIItemAssaultRifleMini.png\")} /> <img alt=\"\" src={DisplayIcon(\"icons/NGSUIItemTalisMini.png\")} /></div>\n\n<div style={{gridArea:\"rng\"}} className=\"rng\">9.9%</div>\n<div style={{gridArea:\"ailment3\"}}><span className=\"freeze\">0.0%</span><br /><span className=\"panic\">0.0%</span></div>\n\n<div style={{gridArea:\"tec\"}} className=\"tec\">9.9%</div>\n<div style={{gridArea:\"ailment4\"}}><span className=\"shock\">0.0%</span><br /><span className=\"poison\">0.0%</span></div>\n</div>\n :weaponPage === 3 ?\n\n <div className=\"augmentDetails\">\n <div className=\"augmentDetailsListHeader\"><h3>Ability Details</h3></div>\n <div className=\"augmentDetailsStatsHeader\"><h3>Stat Adjustment</h3></div>\n <div className=\"augmentDetailsList customScrollbar noSelect\">\n <ul>\n <li className=\"pot\">Dynamo Unit Lv.3</li>\n <li className=\"fixa\">Fixa Attack Lv.3</li>\n <li className=\"aug\">test</li>\n <li className=\"aug\">test</li>\n <li className=\"aug\">test</li>\n <li className=\"aug\">test</li>\n</ul>\n </div>\n <div className=\"augmentDetailsStats\">\n<table>\n<tbody>\n <tr>\n <td>HP</td>\n <td>+99</td>\n </tr>\n <tr>\n <td>PP</td>\n <td>+9</td>\n </tr>\n</tbody>\n</table>\n </div>\n </div>\n :\n <>hi2</>\n }\n </ReactPlaceholder>\n\n </div>\n\n\n\n\n \n\n\n\n\n\n\n\n\n </div>\n <div className=\"containerC\">\n\n\n <div className=\"box\">\n <div className=\"boxTitleBar\">\n <h1>Current Effects</h1></div>\n <ReactPlaceholder showLoadingAnimation ready={GetData(p)!==\"no data\"&&buildLoad} type=\"media\" rows={7}>\n <PageControl pages={2} currentPage={effectPage} setCurrentPage={setEffectPage}/>\n {effectPage===1?<><h3>Effect Name</h3><ul className=\"infoBuffs\"><li onClick={()=>{setPrevFoodPointData({...foodPointData});setFoodMenuWindowOpen(true)}}>Food Boost Effect\n <ul>\n {Object.keys(BUFFS).length===0&&<li>Add Quick Food</li>}\n {Object.keys(BUFFS).map((key)=><li><img alt=\"\" src=\"https://i.imgur.com/TQ8EBW2.png\" /> [{BUFFS[key].from}] {key} +{BUFFS[key].count}</li>)}\n </ul>\n </li>\n <li>Shifta / Deband\n <ul>\n <li><img alt=\"\" src=\"https://i.imgur.com/VIYYNIm.png\" /> Potency +5.0%</li>\n <li><img alt=\"\" src=\"https://i.imgur.com/VIYYNIm.png\" /> Damage Resistance +10.0%</li>\n </ul>\n </li>\n <li>Region Mag Boost\n <ul>\n <li><img alt=\"\" src=\"https://i.imgur.com/N6M74Qr.png\" /> Potency +5.0%</li>\n </ul>\n </li></ul></>:<></>\n }\n </ReactPlaceholder>\n </div>\n <div className=\"box\">\n <div className=\"boxTitleBar\">\n <h1>Damage Stats</h1></div>\n <ReactPlaceholder showLoadingAnimation ready={buildLoad} type=\"media\" rows={6}>\n <PageControl pages={3} currentPage={statPage} setCurrentPage={setStatPage}/>\n <table>\n <tbody>\n {statPage===1?<>\n <tr>\n <td>Critical Hit Rate</td>\n <td>5%</td>\n </tr>\n <tr>\n <td>Critical Multiplier</td>\n <td>120%</td>\n </tr>\n <tr>\n <td>Midrange</td>\n <td>126</td>\n </tr>\n <tr>\n <td>Critical</td>\n <td>152</td>\n </tr>\n <tr>\n <td>Effective</td>\n <td><span className=\"ye\">127</span></td>\n </tr>\n </>:<>\n <tr>\n <td>Critical Hit Rate</td>\n <td>-</td>\n </tr>\n <tr>\n <td>Critical Multiplier</td>\n <td>-</td>\n </tr>\n <tr>\n <td>Midrange</td>\n <td>-</td>\n </tr>\n <tr>\n <td>Critical</td>\n <td>-</td>\n </tr>\n <tr>\n <td>Effective</td>\n <td><span className=\"ye\">-</span></td>\n </tr>\n </>\n }\n </tbody>\n </table>\n </ReactPlaceholder>\n </div>\n </div>\n</div>\n\n<ClassSelectorWindow class={className} subClass={subclassName} setClassName={setClassName} setEditClass={setClassNameSetter} editClass={classNameSetter} setSubClassName={setSubClassName} modalOpen={classSelectWindowOpen} setModalOpen={setClassSelectWindowOpen} GetData={p.GetData}/>\n <Modal ariaHideApp={false} isOpen={classSkillTreeWindowOpen} onRequestClose={() => { setClassSkillTreeWindowOpen(false) }} shouldFocusAfterRender={true} shouldCloseOnOverlayClick={true} shouldCloseOnEsc={true} className=\"modal\" overlayClassName=\"modalOverlay\">\n <div className=\"box skillTreeBox\">\n <div className=\"boxTitleBar\">\n <h1>Class Skill Tree</h1>\n <div className=\"boxExit\" onClick={() => { setClassSkillTreeWindowOpen(false) }}></div>\n </div>\n <PageControl pages={Object.keys(p.GetData(\"class\")).length} pageNames={Object.keys(p.GetData(\"class\")).map((cl)=>cl)} pageDisplay={Object.keys(p.GetData(\"class\")).map((cl)=><><img className=\"boxMenuClassIcon\" alt=\"\" src={p.GetData(\"class\",cl,\"icon\")}/> {cl}</>)} currentPage={treePage} setCurrentPage={setTreePage} />\n <SkillTreeContainer skillPointData={skillPointData} setSkillPointData={setSkillPointData} page={treePage} points={points} setPoints={setPoints} GetData={p.GetData} cl={Object.keys(p.GetData(\"class\"))[treePage-1]}/>\n <div className=\"skillPoints\"> \n <div>Your Skill Points<span>{20-points[treePage-1]}</span></div>\n <div>SP<span></span>{points[treePage-1]}</div>\n </div>\n <div onClick={()=>{setClassSkillTreeWindowOpen(false)}} className=\"skillConfirm\"><div>Confirm</div><div onClick={()=>{setPoints(prevPoints);setSkillPointData(prevSkillPointData);setClassSkillTreeWindowOpen(false)}}>Cancel</div></div>\n </div>\n </Modal>\n\n<SelectorWindow title=\"Weapon Selection\" modalOpen={weaponSelectWindowOpen} setModalOpen={setWeaponSelectWindowOpen} GetData={p.GetData}\n pageNames={[\"All\",\"Rifle\",\"Launcher\",\"Rod\",\"Talis\"]}\n sortItems={[\"Standard Sort\",\"Rarity\",\"Attack\",\"Potency\"]}\n filter={true}\n dataFunction={()=>{\n var dat1=p.GetData(\"weapon_existence_data\")\n return Array.isArray(dat1)?dat1.map((weapon_existence_data)=>{\n var weapon_type=p.GetData(\"weapon_type\",weapon_existence_data.weapon_type_id,undefined,true)\n var weapon=p.GetData(\"weapon\",weapon_existence_data.weapon_id,undefined,true)\n var potential=p.GetData(\"potential\",weapon.potential_id,undefined,true)\n var potential_all=p.GetData(\"potential_data\")\n var potential_tooltip=[]\n for (var pot in potential_all) {\n if (pot.includes(potential.name)) {\n potential_tooltip.push(p.GetData(\"potential_data\",pot))\n }\n }\n return [weapon_type,weapon,potential,potential_tooltip,weapon_existence_data]\n }):[]\n }}\n filterFunction={(page,item)=>{\n switch (page) {\n case 2:return item[WEAPON_WEAPONTYPE].name===\"Assault Rifle\"\n case 3:return item[WEAPON_WEAPONTYPE].name===\"Launcher\"\n case 4:return item[WEAPON_WEAPONTYPE].name===\"Rod\"\n case 5:return item[WEAPON_WEAPONTYPE].name===\"Talis\"\n default:return true\n }\n }}\n searchFieldFunction={(searchText,item)=>searchText.length>0?(item[WEAPON_WEAPON].name.toLowerCase()+\" \"+item[WEAPON_WEAPONTYPE].name.toLowerCase()).includes(searchText.trim().toLowerCase()):true}\n sortOrderFunction={(sort,itemA,itemB)=>{\n switch (sort) {\n case \"Rarity\":return itemB[1].rarity-itemA[1].rarity\n case \"Attack\":return itemB[1].atk-itemA[1].atk\n default:return 0\n } \n }}\n displayFunction={(item)=>{\n return<div className={\"itemWrapper r\"+item[WEAPON_WEAPON].rarity} onClick={()=>{setSelectedWeapon(item);setWeaponSelectWindowOpen(false)}}><div className=\"itemImgWrapper\"><img alt=\"\" src={DisplayIcon(item[WEAPON_EXISTENCE_DATA]?.icon)} /></div><div className=\"itemNameWrapper rifle\">{GetSpecialWeaponName(item)}</div><div className=\"itemRarityWrapper\"> </div><div className=\"itemPropertiesWrapper\"><span className=\"atk\">{item[WEAPON_WEAPON].atk}</span>\n <span className=\"pot\" id={\"mouseover-tooltip\"+item[WEAPON_WEAPONTYPE].id+\"_\"+item[WEAPON_WEAPON].id+\"_\"+item[WEAPON_POTENTIAL].id+\"_\"+item[WEAPON_POTENTIAL_TOOLTIP].id}>{item[WEAPON_POTENTIAL].name}</span>\n <ExpandTooltip target={\"mouseover-tooltip\"+item[WEAPON_WEAPONTYPE].id+\"_\"+item[WEAPON_WEAPON].id+\"_\"+item[WEAPON_POTENTIAL].id+\"_\"+item[WEAPON_POTENTIAL_TOOLTIP].id}>\n <>{item[WEAPON_POTENTIAL_TOOLTIP].map((pot,i)=><React.Fragment key={i}>{(i!==0)&&<br/>}{pot.name}: {pot.description?pot.description.split(\"\\\\n\").map((it,ii)=><React.Fragment key={ii}>{it}<br/> </React.Fragment>):<React.Fragment key={i}/>}</React.Fragment>)}</>\n </ExpandTooltip></div></div>}}\n />\n \n<SelectorWindow title={\"Armor Selection - Slot \"+armorSlotSelection} modalOpen={armorSelectWindowOpen} setModalOpen={setArmorSelectWindowOpen} GetData={p.GetData}\n pageNames={[]}\n sortItems={[\"Standard Sort\",\"Rarity\",\"HP\",\"PP\",\"Melee Potency\",\"Range Potency\",\"Tech Potency\"]}\n filter={true}\n dataFunction={()=>{\n var dat1=p.GetData(\"armor\")\n return typeof dat1===\"object\"&&dat1!==null?Object.keys(dat1).map((armor)=>{\n return dat1[armor]\n }):[]\n }}\n filterFunction={(page,item)=>item.slot===armorSlotSelection}\n searchFieldFunction={(searchText,item)=>searchText.length>0?item.name.trim().toLowerCase().includes(searchText.toLowerCase()):true}\n sortOrderFunction={(sort,itemA,itemB)=>{\n switch (sort) {\n case \"Rarity\":return itemB.rarity-itemA.rarity\n case \"HP\":return itemB.hp-itemA.hp\n case \"PP\":return itemB.pp-itemA.pp\n case \"Melee Potency\":return itemB.mel_dmg-itemA.mel_dmg\n case \"Range Potency\":return itemB.rng_dmg-itemA.rng_dmg\n case \"Tech Potency\":return itemB.tec_dmg-itemA.tec_dmg\n default:return 0\n } \n }}\n displayFunction={(item)=>{\n return <div className={\"itemWrapper r\"+item.rarity} onClick={()=>{\n switch(armorSlotSelection) {\n case 1:setSelectedArmor1(item);break;\n case 2:setSelectedArmor2(item);break;\n case 3:setSelectedArmor3(item);break;\n default:setSelectedArmor1(item)\n }\n setArmorSelectWindowOpen(false)}}>\n <div className=\"itemImgWrapper\"><img alt=\"\" src={DisplayIcon(item?.icon)} /></div>\n <div className=\"itemNameWrapper rifle\">{item.name}</div>\n <div className=\"itemRarityWrapper\" style={{gridArea:\"rarity\"}}> </div>\n <div className=\"itemPropertiesWrapper\"><span className=\"atk\">{item.def}</span></div>\n </div>\n }}\n />\n\n<FoodPopupWindow\n GetData={p.GetData}\n foodMenuWindowOpen={foodMenuWindowOpen}\n setFoodMenuWindowOpen={setFoodMenuWindowOpen}\n foodPointData={foodPointData}\n setFoodPointData={setFoodPointData}\n prevFoodPointData={prevFoodPointData}/>\n\n<Modal ariaHideApp={false} isOpen={augmentSelectWindowOpen} onRequestClose={()=>{setAugmentSelectWindowOpen(false)}} shouldFocusAfterRender={true} shouldCloseOnOverlayClick={true} shouldCloseOnEsc={true} className=\"modal\" overlayClassName=\"modalOverlayAugment\">\n<div className=\"augmentSelectorPopup\">\n<div className=\"box\">\n<div className=\"boxTitleBar\">\n <h1>hi</h1></div>\n\n </div>\n \n<div className=\"box equipWindow\">\n <div className=\"boxTitleBar\">\n <h1>Equipped Weapon</h1></div>\n <div className=\"equipNameWrapper\">\n <div className=\"equipName\"><h2 className=\"rifle\">{GetSpecialWeaponName(selectedWeapon)}</h2></div>\n <div className=\"equipEnhancement editOverlayWrapper\">\n <div className=\"editOverlay\"><p><PencilFill /> Edit</p></div>\n +40</div>\n </div>\n\n\n <div className=\"augmentDetails\">\n <div className=\"augmentDetailsListHeader\"><h3>Ability Details</h3></div>\n <div className=\"augmentDetailsStatsHeader\"><h3>Stat Adjustment</h3></div>\n <div className=\"augmentDetailsList customScrollbar noSelect\">\n <ul>\n <li className=\"pot\">Dynamo Unit Lv.3</li>\n <li className=\"fixa\">Fixa Attack Lv.3</li>\n <li className=\"aug\">test</li>\n <li className=\"aug\">test</li>\n <li className=\"aug\">test</li>\n <li className=\"aug\">test</li>\n</ul>\n </div>\n <div className=\"augmentDetailsStats\">\n<table>\n<tbody>\n <tr>\n <td>HP</td>\n <td>+99</td>\n </tr>\n <tr>\n <td>PP</td>\n <td>+9</td>\n </tr>\n</tbody>\n</table>\n </div>\n </div>\n\n\n\n </div>\n </div>\n</Modal>\n</>\n)\n}\n\nexport default TestPanel;","import './reset.css'; // Generic reset\nimport './style.css'; // The new new\nimport React, {useState,useEffect,useReducer} from 'react';\nimport Toggle from 'react-toggle' //Tooltip props: http://aaronshaf.github.io/react-toggle/\nimport Helmet from 'react-helmet'\nimport Builds from './Builds';\n\nimport {TrashFill, PlusCircle, LifePreserver, Server, CloudUploadFill} from 'react-bootstrap-icons'\n\nimport { SkillTreeEditor } from './skilltree/skillTreeEditor'\n\nimport { GoogleLogin } from 'react-google-login';\n\nimport {\n HashRouter,\n Switch,\n Route,\n useHistory,\n} from \"react-router-dom\";\n\nimport { HashLink as Link } from 'react-router-hash-link';\n\nimport TestHeader from './TestHeader'; // Test Header!\nimport TestPanel from './TestPanel'; // Dudley's Test Panel\nimport md5 from 'md5';\n\n\nconst cookies = require('cookie-handler');\nconst axios = require('axios');\nconst parse = require('csv-parse/lib/sync')\n\n/*\nDamage types\nconst MELEE_DMG = 0\nconst RANGE_DMG = 1\nconst TECH_DMG = 2\n\nArt properties\nconst NORMAL = 0\nconst PHOTON_ART = 1\nconst WEAPON_ACTION = 2\nconst STEP_COUNTER = 3\nconst PARRY_COUNTER = 4\n//NOT USED YET*/\n\nconst BACKENDURL=process.env.REACT_APP_GITPOD_WORKSPACE_URL||process.env.REACT_APP_BACKENDURL||'https://projectdivar.com:4504'\nconst APP_TITLE = \"NGS Planner\"\n\nfunction GetBackendURL(p) {\n\treturn (BACKENDURL)+(p.TESTMODE?\"/test\":\"\")\n}\n\nfunction Box(p) {\n\treturn <>\n\t\t<div className=\"box\">\n\t\t<div className=\"boxTitleBar\">\n\t\t<h1>{p.title}</h1>\n\t\t</div>\n\t\t\t{p.children} \n\t\t</div>\n\t</>\n}\n\nfunction Table(p) {\n\treturn <span className={p.classes}>\n\n\t\t\t{p.children}\n\n\t</span>\n}\n\nfunction InputBox(p) {\n\tconst [value,setValue] = useState(p.value)\n\tconst [failed,setFailed] = useState(false)\n\tconst [sending,setSending] = useState(false)\n\n\tfunction changeFunc(f){setValue(f.currentTarget.value)\n\t\tif (p.callback4) {\n\t\t\tp.callback4(f.currentTarget.value)\n\t\t}}\n\tfunction blurFunc(f){\n\t\tif (p.callback) {\n\t\t\tsetSending(true)\n\t\t\tsetFailed(false)\n\t\t\tp.callback(f.currentTarget.value)\n\t\t\t.then(()=>{setFailed(false)})\n\t\t\t.catch(()=>{setFailed(true)})\n\t\t\t.then(()=>{setSending(false)})}\n\t\telse \n\t\tif (p.callback3) {\n\t\t\tp.callback3(f.currentTarget.value)\n\t\t}}\n\tfunction keydownFunc(f){\n\t\tif (p.callback2) {\n\t\t\tp.callback2(f,value)\n\t\t}\n\t}\n\n\treturn p.data?<select disabled={p.lockSubmission} className={failed?\"failedInput\":sending?\"submitting\":\"\"} value={value} onKeyDown={(f)=>{keydownFunc(f)}} onChange={(f)=>{changeFunc(f)}} onBlur={(f)=>{blurFunc(f)}}>\n\t\t{p.includeBlankValue&&<option/>}\n\t\t{p.data.map((item)=><option key={item.id} value={item.id}>{item.id} - {item.name||item.username}</option>)}\n\t</select>:<input disabled={p.lockSubmission} className={failed?\"failedInput\":sending?\"submitting\":\"\"} value={value} onKeyDown={(f)=>{keydownFunc(f)}} onChange={(f)=>{changeFunc(f)}} onBlur={(f)=>{blurFunc(f)}}/>\n}\n\nfunction TableEditor(p) {\n\t\n\tconst initialVals={}\n\n\tconst { TESTMODE } = p\n\t\n\tfunction updateVals(state,update) {\n\t\tif (update==='Clear') {\n\t\t\treturn initialVals\n\t\t}\n\t\tstate[update.field]=update.value\n\t\treturn state \n\t}\n\t\n\tconst [fields,setFields] = useState([])\n\tconst [data,setData] = useState([])\n\tconst [update,setUpdate] = useState(false)\n\tconst [submitVals,setSubmitVal] = useReducer(updateVals,initialVals)\n\tconst [loading,setLoading] = useState(false)\n\tconst [dependencies,setDependencies] = useState([])\n\tconst [importAllowed,setImportAllowed] = useState(false)\n\tconst [lockSubmission,setLockSubmission] = useState(false)\n\n\tfunction patchValue(value,p,col,dat) {\n\t\treturn axios.patch(p.BACKENDURL+p.path,{\n\t\t\t[col.name]:value===\"null\"?null:value,\n\t\t\tid:dat.id,\n\t\t\tpass:p.password\n\t\t})\n\t}\n\t\n\tfunction SubmitBoxes() {\n\t\tif (!lockSubmission) {\n\t\t\tsetLockSubmission(true)\n\t\t\taxios.post(p.BACKENDURL+p.path,{...submitVals,pass:p.password})\n\t\t\t.then(()=>{\n\t\t\t\tsetSubmitVal(\"Clear\")\n\t\t\t\tsetUpdate(true)\n\t\t\t})\n\t\t\t.catch((err)=>{\n\t\t\t\talert(JSON.stringify(err.response.data))\n\t\t\t})\n\t\t\t.then(()=>{\n\t\t\t\tsetLockSubmission(false)\n\t\t\t})\n\t\t}\n\t}\n\n\tfunction SubmitDeletion() {\n\t\tif (!lockSubmission) {\n\t\t\tsetLockSubmission(true)\n\t\t\tvar promises = []\n\t\t\tfor (var dat of data) {\n\t\t\t\tif (document.getElementById(\"delete_\"+dat.id).checked) {\n\t\t\t\t\tpromises.push(axios.delete(p.BACKENDURL+p.path,{data:{pass:p.password,id:dat.id}}))\n\t\t\t\t}\n\t\t\t}\n\t\t\tPromise.allSettled(promises)\n\t\t\t.catch((err)=>{\n\t\t\t\talert(err.message)\n\t\t\t})\n\t\t\t.then((data)=>{\n\t\t\t\tsetLockSubmission(false)\n\t\t\t\tsetUpdate(true)\n\t\t\t})\n\t\t}\n\t}\n\t\n\tuseEffect(()=>{\n\t\tsetUpdate(true)\n\t},[p.path,TESTMODE])\n\n\tuseEffect(()=>{\n\t\tfor (var col of fields) {\n\t\t\tif (col.name===\"name\") {\n\t\t\t\tsetImportAllowed(true)\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t},[fields])\n\t\n\tuseEffect(()=>{\n\t\tif (update) {\n\t\t\tsetLoading(true)\n\t\t\tvar dependency_map = {}\n\t\t\taxios.get(p.BACKENDURL+p.path+\"?pass=\"+p.password)\n\t\t\t.then((data)=>{\n\t\t\t\tvar cols = data.data.fields\n\t\t\t\tvar rows = data.data.rows\n\t\t\t\t\n\t\t\t\tsetFields(cols.filter((col,i)=>col.name!==\"id\"&&!(i===0&&col.name===\"name\")))\n\n\t\t\t\tvar promise_list = []\n\n\t\t\t\tcols.filter((col)=>col.name!==\"id\"&&col.name.includes(\"_id\")).forEach((col)=>{\n\t\t\t\t\tpromise_list.push(axios.get(p.BACKENDURL+\"/\"+col.name.replace(\"_id\",\"\")+\"?pass=\"+p.password)\n\t\t\t\t\t.then((data)=>{\n\t\t\t\t\t\tdependency_map[col.name]=data.data.rows.sort((a,b)=>b.id-a.id)\n\t\t\t\t\t}))\n\t\t\t\t})\n\t\t\t\tsetData(rows)\n\t\t\t\treturn Promise.allSettled(promise_list)\n\t\t\t})\n\t\t\t.then(()=>{\n\t\t\t\tsetDependencies(dependency_map)\n\t\t\t\tsetLoading(false)\n\t\t\t})\n\t\t\tsetUpdate(false)\n\t\t}\n\t},[update,p.path,p.BACKENDURL,p.password])\n\t\n\treturn <>\n\t{!loading?<>\t\t\t {importAllowed&&<caption><label className=\"buttonLabel\" htmlFor=\"uploads\">Import CSV</label><input onChange={(f)=>{\n\t\t\t\tconst reader = new FileReader()\n\t\t\t\treader.onload=(ev)=>{\n\t\t\t\t\tvar promises=[]\n\t\t\t\t\tparse(ev.target.result,{columns:true,skip_empty_lines:true}).forEach((entry)=>{\n\t\t\t\t\t\tfor (var col of fields) {\n\t\t\t\t\t\t\tif ((col.dataTypeID===23||col.dataTypeID===701||col.dataTypeID===16)&&entry[col.name]===\"\") {\n\t\t\t\t\t\t\t\tentry[col.name]=0\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpromises.push(axios.post(p.BACKENDURL+p.path,{...entry,pass:p.password}))\n\t\t\t\t\t})\n\t\t\t\t\tPromise.allSettled(promises)\n\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\tsetUpdate(true)\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\treader.readAsText(f.target.files[0])\n\t\t\t }} style={{opacity:0}} id=\"uploads\" type=\"file\" accept=\".txt,.csv\"/></caption>}\n\t\t<div>\n\t\t\t<table>\n\t\t\t <thead>\n\t\t\t\t<tr>\n\t\t\t\t\t<th className=\"table-padding\"><TrashFill onClick={()=>{SubmitDeletion()}} className=\"trashButton\"/></th>\n\t\t\t\t\t{fields.map((field,i)=><React.Fragment key={i}><th scope=\"col\" className=\"table-padding\">{field.name}</th></React.Fragment>)}\n\t\t\t\t</tr>\n\t\t\t </thead>\n\t\t\t <tbody>\n\t\t\t\t\t\t{<tr><td></td>{fields.map((col,i)=><td key={i}>{<InputBox includeBlankValue={true} data={dependencies[col.name]} callback4={\n\t\t\t\t\t\t\t(f)=>{setSubmitVal({field:col.name,value:f});}}/>}</td>)}<td><input style={{display:\"none\"}}/><PlusCircle onClick={()=>{SubmitBoxes()}} className=\"submitbutton\"/></td></tr>}\n\t\t\t\t\t{data.map((dat)=><tr key={dat.id}>\n\t\t\t\t\t<td><input id={\"delete_\"+dat.id} type=\"checkbox\"/></td>{fields.map((col,i)=><td key={dat.id+\"_\"+i} className=\"table-padding table\">\n\t\t\t\t\t\t<InputBox lockSubmission={lockSubmission} data={dependencies[col.name]} callback={(value)=>patchValue(value,p,col,dat)} callback2={(f,value)=>{if (f.key==='Enter') {f.currentTarget.blur()} else {return 'Chill'}}} value={String(dat[col.name])}/></td>)}</tr>)}\n\t\t\t </tbody>\n\t\t\t</table>\n\t\t</div></>:<><img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/><img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/><img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/><img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/><img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/><img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/><img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/><img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/><img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/><img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/><img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/><img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/><img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/><img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/><img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/><img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/><img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/></>}\n\t</>\n}\n\nfunction DatabaseEditor(p) {\n\tconst [loading,setLoading] = useState(true)\n\tconst [message,setMessage] = useState(<span style={{color:\"black\"}}></span>)\n\tconst [databases,setDatabases] = useState([])\n\tconst [update,setUpdate] = useState(true)\n\n\tuseEffect(()=>{\n\t\tif (update) {\n\t\t\taxios.get(p.BACKENDURL+\"/databases?pass=\"+p.password)\n\t\t\t.then((data)=>{\n\t\t\t\tsetDatabases(data.data)\n\t\t\t})\n\t\t\t.catch((err)=>{\n\t\t\t\tconsole.log(err.message)\n\t\t\t})\n\t\t\t.then(()=>{\n\t\t\t\tsetLoading(false)\n\t\t\t})\n\t\t\tsetUpdate(false)\n\t\t}\n\t},[update,p.BACKENDURL,p.password])\n\n\treturn <>\n\t\t{!loading?<>\n\t\t\t\t<button className=\"basichover\" style={{backgroundColor:\"navy\"}} onClick={()=>{\n\t\t\t\t\tsetLoading(true)\n\t\t\t\t\tsetMessage(<span style={{color:\"black\"}}>Uploading Test Database to Production...</span>)\n\t\t\t\t\taxios.post(p.BACKENDURL+\"/databases/testtolive\",{pass:p.password})\n\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\tsetMessage(<span style={{color:\"green\"}}>Success! Test Database is now live!</span>)\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err)=>{\n\t\t\t\t\t\tsetMessage(<span style={{color:\"red\"}}>{err.message}</span>)\n\t\t\t\t\t})\n\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\tsetLoading(false)\n\t\t\t\t\t})\n\t\t\t\t}}>Apply TEST Database to LIVE Database</button><br/><br/>\n\t\t\t\t<button className=\"basichover\" style={{backgroundColor:\"maroon\"}} onClick={()=>{\n\t\t\t\t\tsetLoading(true)\n\t\t\t\t\tsetMessage(<span style={{color:\"black\"}}>Restoring Test Database using Live Database...</span>)\n\t\t\t\t\taxios.post(p.BACKENDURL+\"/databases/livetotest\",{pass:p.password})\n\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\tsetMessage(<span style={{color:\"green\"}}>Success! Live Database has been applied to the Test Database!</span>)\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err)=>{\n\t\t\t\t\t\tsetMessage(<span style={{color:\"red\"}}>{err.message}</span>)\n\t\t\t\t\t})\n\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\tsetLoading(false)\n\t\t\t\t\t})\n\t\t\t\t}}>Reset TEST database using current LIVE Database</button><br/><br/>\n\t\t\t\t<button className=\"basichover\" style={{backgroundColor:\"darkgreen\"}} onClick={()=>{\n\t\t\t\t\tsetLoading(true)\n\t\t\t\t\tsetMessage(<span style={{color:\"black\"}}>Backing up the Live database...</span>)\n\t\t\t\t\taxios.post(p.BACKENDURL+\"/databases/backup\",{pass:p.password})\n\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\tsetMessage(<span style={{color:\"green\"}}>Success! Live Database has been saved!</span>)\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err)=>{\n\t\t\t\t\t\tsetMessage(<span style={{color:\"red\"}}>{err.message}</span>)\n\t\t\t\t\t})\n\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\tsetUpdate(true)\n\t\t\t\t\t})}}>Backup current LIVE Database</button><br/><br/>\n\t\t\t</>:<img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/>\n\t\t}\n\t\t{message}\n\t\t<hr/>\n\t\t<br/><br/>\n\t\t<h2><u>Current Databases</u></h2>\n\t\t<br/><br/>\n\t\t<span style={{fontSize:\"24px\",top:\"-16px\",position:\"relative\",height:\"64px\",lineHeight:\"64px\",textAlign:\"center\"}}><LifePreserver className=\"databaseIcon\" style={{color:\"green\"}}/>Live Database</span>\n\t\t <span style={{fontSize:\"24px\",top:\"-16px\",position:\"relative\",height:\"64px\",lineHeight:\"64px\",textAlign:\"center\"}}><LifePreserver className=\"databaseIcon\" style={{color:\"red\"}}/>Test Database</span><br/>\n\t\t{databases.map((db,i)=>{\n\t\t\tvar label = \"\"\n\t\t\tif (db.datname!==\"ngsplanner\"&&db.datname!==\"ngsplanner2\") {\n\t\t\t\tvar dateStr = db.datname.replace(\"ngsplanner\",\"\")\n\t\t\t\tvar date = new Date(dateStr.slice(0,4),dateStr.slice(4,6),dateStr.slice(6,8),dateStr.slice(8,10),dateStr.slice(10,12),dateStr.slice(12,14))\n\t\t\t\tlabel=<><Server className=\"databaseIcon\" style={{color:\"blue\"}}/>{\"Backup from \"+date}</>\n\t\t\t\treturn <React.Fragment key={i}><span style={{fontSize:\"24px\",top:\"-16px\",position:\"relative\",height:\"64px\",lineHeight:\"64px\",textAlign:\"center\"}}>{label}<button style={{background:\"blue\"}}\n\t\t\t\tonClick={()=>{\n\t\t\t\t\tsetLoading(true)\n\t\t\t\t\taxios.post(p.BACKENDURL+\"/databases/restorefrombackup\",{\n\t\t\t\t\t\tdatabase:db.datname,\n\t\t\t\t\t\tpass:p.password\n\t\t\t\t\t})\n\t\t\t\t\t.then((data)=>{\n\t\t\t\t\t\tsetMessage(<span style={{color:\"green\"}}>{\"Success! Database has been set to the state from \"+date}</span>)\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err)=>{\n\t\t\t\t\t\tsetMessage(<span style={{color:\"red\"}}>{err.message}</span>)\n\t\t\t\t\t})\n\t\t\t\t\t.then(()=>{\n\t\t\t\t\t\tsetLoading(false)\n\t\t\t\t\t})\n\t\t\t\t}}><CloudUploadFill/> Restore</button></span><br/></React.Fragment>\n\t\t\t} else {\n\t\t\t\treturn <React.Fragment key={i}/>\n\t\t\t}\n\t\t})}\n\t</>\n}\n\nfunction AdminPanel(p) {\n\tconst [verified,setVerified] = useState(false)\n\tconst [password,setPassword] = useState(\"\")\n\n\tconst navigationData=[\n\t\t{page:\"Class\",url:\"/admin/class\",table:\"/class\"},\n\t\t{page:\"Class Data\",url:\"/admin/classdata\",table:\"/class_level_data\"},\n\t\t{page:\"Class-Weapon Compatibility\",url:\"/admin/classweaponcompatibility\",table:\"/class_weapon_type_data\"},\n\t\t{page:\"Class Skills\",url:\"/admin/classskills\",table:\"/class_skill\"},\n\t\t{page:\"Class Skill Data\",url:\"/admin/classskilldata\",table:\"/class_skill_data\"},\n\t\t{hr:true},\n\t\t{page:\"Weapons\",url:\"/admin/weapons\",table:\"/weapon\"},\n\t\t{page:\"Weapon Existence Data\",url:\"/admin/weaponexistencedata\",table:\"/weapon_existence_data\"},\n\t\t{page:\"Weapon Types\",url:\"/admin/weapontypes\",table:\"/weapon_type\"},\n\t\t{page:\"Class-Weapon Compatibility\",url:\"/admin/classweaponcompatibility\",table:\"/class_weapon_type_data\",duplicate:true},\n\t\t{page:\"Photon Arts\",url:\"/admin/photonarts\",table:\"/photon_art\"},\n\t\t{hr:true},\n\t\t{page:\"Armor\",url:\"/admin/armor\",table:\"/armor\"},\n\t\t{page:\"Potentials\",url:\"/admin/potentials\",table:\"/potential\"},\n\t\t{page:\"Potential Data\",url:\"/admin/potentialdata\",table:\"/potential_data\"},\n\t\t{hr:true},\n\t\t{page:\"Builds\",url:\"/admin/builds\",table:\"/builds\"},\n\t\t{hr:true},\n\t\t{page:\"Skills\",url:\"/admin/skills\",table:\"/skill\"},\n\t\t{page:\"Skill Types\",url:\"/admin/skilltypes\",table:\"/skill_type\"},\n\t\t{page:\"Skill Data\",url:\"/admin/skilldata\",table:\"/skill_data\"},\n\t\t{page:<span style={{color:\"gold\"}}>Skill Tree Editor</span>,url:\"/admin/skilltreeeditor\",render:<SkillTreeEditor setUpdate={p.setUpdate} password={password} BACKENDURL={GetBackendURL(p)} GetData={p.DATA}/>},\n\t\t{page:\"Skill Tree Data\",url:\"/admin/skilltreedata\",table:\"/skill_tree_data\"},\n\t\t{page:\"Photon Arts\",url:\"/admin/photonarts\",table:\"/photon_art\",duplicate:true},\n\t\t{page:\"Class Skills\",url:\"/admin/classskills\",table:\"/class_skill\",duplicate:true},\n\t\t{page:\"Class Skill Data\",url:\"/admin/classskilldata\",table:\"/class_skill_data\",duplicate:true},\n\t\t{hr:true},\n\t\t{page:\"Augment Types\",url:\"/admin/augmenttypes\",table:\"/augment_type\"},\n\t\t{page:\"Augments\",url:\"/admin/augments\",table:\"/augment\"},\n\t\t{page:\"Elements\",url:\"/admin/elements\",table:\"/element\"},\n\t\t{hr:true},\n\t\t{page:\"Enemy Data\",url:\"/admin/enemydata\",table:\"/enemy_data\"},\n\t\t{hr:true},\n\t\t{page:\"Food\",url:\"/admin/food\",table:\"/food\"},\n\t\t{page:\"Food Multipliers\",url:\"/admin/foodmultipliers\",table:\"/food_mult\"},\n\t\t{hr:true},\n\t\t{page:\"Roles\",url:\"/admin/roles\",table:\"/roles\"},\n\t\t{page:\"Users\",url:\"/admin/users\",table:\"/users\"},\n\t\t{hr:true},\n\t\t{page:\"Misc. Site Data\",url:\"/admin/sitedata\",table:\"/site_data\"},\n\t\t{page:\"Database Audit\",url:\"/admin/database_audit\",table:\"/database_audit\"},\n\t]\n\n\treturn <div className=\"adminMain\">\n\t\t{!verified?\n\t\t\t\t\t\t<div className=\"modalOverlay\">\n\t\t\t\t\t\t<div className=\"modal\">\n\t\t\t\t\t\t<div className=\"box boxAdmin\">\n\t\t\t\t\t\t<div className=\"boxTitleBar\"><h1>Admin</h1></div>\n\t\t\t\t\t\t<p></p>\n\t\t\t<input type=\"password\" value={password} onChange={(f)=>{setPassword(f.currentTarget.value)}} onKeyDown={(e)=>{\n\t\t\t\tif (e.key===\"Enter\") {\n\t\t\t\t\taxios.post(GetBackendURL(p)+\"/passwordcheck\",{\n\t\t\t\t\t\tpass:password\n\t\t\t\t\t})\n\t\t\t\t\t.then((data)=>{\n\t\t\t\t\t\tif (data.data.verified) {\n\t\t\t\t\t\t\tsetVerified(data.data.verified)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err)=>{\n\t\t\t\t\t\tsetVerified(false)\n\t\t\t\t\t\tsetPassword(\"\")\n\t\t\t\t\t})}}}></input>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n:<>\n\t\t\n\t\t<div className=\"box boxAdminNav\">\n\t\t<div className=\"boxTitleBar\">\n\t\t<h1>Navigation</h1>\n\t\t</div>\n\t\t<p>Testing Mode <span><Toggle checked={p.TESTMODE} onChange={(f)=>{p.setTESTMODE(f.target.checked)}}/> {p.TESTMODE?<b>ON</b>:<b>OFF</b>}</span></p>\n\t\t<div className=\"adminNavContainer customScrollbar\">\n\t\t <Table classes=\"adminNav\">\n\t\t {navigationData.map((nav,i)=>(nav.hr)?<hr key={i}/>:<React.Fragment key={i}><Link to={process.env.PUBLIC_URL+nav.url}>{nav.page}</Link><br/></React.Fragment>)}\n\t\t <Link to={process.env.PUBLIC_URL+\"/admin/database_manager\"}>Database Manager</Link><br/>\n\t\t</Table>\n\t\t</div>\n\t\t</div>\t\t\n\t\t\n\n\n\n\t\t\t{navigationData.map((nav,i)=>(nav.duplicate===undefined&&nav.hr===undefined)&&<Route key={i} path={process.env.PUBLIC_URL+nav.url}>\n\t\t\t<div className=\"box boxAdminContent\">\n\t\t<div className=\"boxTitleBar\">\n\t\t<h1>{nav.page}</h1></div>\n\t\t<div className=\"adminContainer adminScrollbar\">\n\t\t<Helmet>\n\t\t\t\t\t<title>{APP_TITLE+\" - Admin Panel: \"+nav.page}</title>\n\t\t\t\t</Helmet>\n\t\t\t\t{nav.render??<TableEditor TESTMODE={p.TESTMODE} password={password} BACKENDURL={GetBackendURL(p)} path={nav.table}/>}\n\t\t\t\t</div></div></Route>)}\n\n\t\t\t<Route path={process.env.PUBLIC_URL+\"/admin/database_manager\"}>\n\t\t\t<div className=\"box boxAdminContent\">\n\t\t\t<div className=\"boxTitleBar\">\n\t\t<h1>Database Editor</h1></div>\n\t\t<div className=\"adminContainer\">\n\t\t\t\t\t<DatabaseEditor password={password} BACKENDURL={GetBackendURL(p)}/>\n\t\t\t\t</div>\t\t\t\t\t\n\t\t\t\t</div>\t\n\t\t\t</Route>\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t</>}\n\t</div>\n}\n\nfunction EditStatBox(p) {\n\n\tconst [value,setValue] = useState(p.value)\n\n\tuseEffect(()=>{\n\t\tsetValue(p.value)\n\t},[p.value])\n\n\treturn <><input value={value} onChange={(f)=>{setValue(f.currentTarget.value);p.callback(f.currentTarget.value)}}/> ({value})<br/></>\n}\n\nfunction DamageCalculator(p) {\n\n\tconst [augmentData,setAugmentData] = useState({})\n\t//const [update,setUpdate] = useState(false)\n\n\tuseEffect(()=>{\n\t\taxios.get(p.BACKENDURL+\"/augment\")\n\t\t.then((data)=>{\n\t\t\tvar augmentData = {}\n\t\t\tdata.data.rows.forEach((entry)=>{augmentData[entry.name]=entry})\n\t\t\tsetAugmentData(augmentData)\n\t\t})\n\t},[p.BACKENDURL])\n\n\tconst character = {\n\t\tweapon:{\n\t\t\taugments:[\"1\",\"2\"]\n\t\t},\n\t\tarmor1:{\n\t\t\taugments:[\"2\"]\n\t\t},\n\t\tarmor2:{\n\t\t\taugments:[]\n\t\t},\n\t\tarmor3:{\n\t\t\taugments:[]\n\t\t}\n\t}\n\n\tuseEffect(()=>{\n\t\tif (Object.keys(augmentData).length>0) {\n\t\t\tvar searchFields = [{field:\"variance\",variable:0},{field:\"mel_dmg\",variable:0}]\n\t\t\tfor (var equip of [character.weapon,character.armor1,character.armor2,character.armor3]) {\n\t\t\t\tfor (var field of searchFields) {\n\t\t\t\t\tfor (var i=0;i<equip.augments.length;i++) {\n\t\t\t\t\t\tvar variance = augmentData[equip.augments[i]][field.field]\n\t\t\t\t\t\tfield.variable+=variance\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tsetAugDmgVariance(searchFields[0].variable)\n\t\t}\n\t},[augmentData,character.armor1,character.armor2,character.armor3,character.weapon])\n\n\tconst [rawDmg,setRawDmg] = useState(0)\n\t\n\tconst [weaponTotalAtk,setWeaponTotalAtk] = useState(100)\n\t\n\t\tconst [weaponBaseAtk,setWeaponBaseAtk] = useState(1)\n\t\tconst [weaponEnhanceLv,setweaponEnhanceLv] = useState(1)\n\n\tuseEffect(()=>{\n\t\tsetWeaponTotalAtk(Number(weaponBaseAtk)+Number(weaponEnhanceLv))\n\t},[weaponBaseAtk,weaponEnhanceLv])\n\n\tconst [dmgVariance,setDmgVariance] = useState(1)\n\n\t\tconst [weaponDmgVariance,setWeaponDmgVariance] = useState(1)\n\t\tconst [augDmgVariance,setAugDmgVariance] = useState(1)\n\n\tuseEffect(()=>{\n\t\tsetDmgVariance(Number(weaponDmgVariance)+Number(augDmgVariance))\n\t},[weaponDmgVariance,augDmgVariance])\n\n\tconst [baseAtk,setBaseAtk] = useState(100)\n\tconst [enemyDef,setEnemyDef] = useState(5)\n\tconst [multipliers,setMultipliers] = useState(1)\n\n\tuseEffect(()=>{\n\t\tsetRawDmg(((Number(weaponTotalAtk)*Number(dmgVariance))+Number(baseAtk)-Number(enemyDef))*Number(multipliers)/5)\n\t},[weaponTotalAtk,dmgVariance,baseAtk,enemyDef,multipliers])\n\t\n\tconst [atkmult,setAtkMult] = useState(1);\n\tconst [partmult,setPartMult] = useState(1);\n\tconst [elementalWeaknessMult,setElementalWeaknessMult] = useState(1.2)\n\tconst [mainClassWeaponBoost,setMainClassWeaponBoost] = useState(1.1)\n\tconst [classSkillMult,setClassSkillMult] = useState(1)\n\tconst [equipMult,setEquipMult] = useState(1)\n\n\tconst [augmentEquipMult,setAugmentEquipMult] = useState(1)\n\tconst [potencyFloorEquipMult,setPotencyFloorEquipMult] = useState(1)\n\tconst [elementalWeaponEquipMult,setElementalWeaponEquipMult] = useState(1.1)\n\t\n\tconst [critMult,setCritMult] = useState(1.2)\n\tconst [appropriateDistance,setAppropriateDistance] = useState(1)\n\t\n\tconst [foodBoost,setFoodBoost] = useState(1)\n\tconst [fieldEffects,setFieldEffects] = useState(1.05)\n\tconst [statusAilments,setStatusAilments] = useState(1)\n\n\tconst [enemyCorrectionMult,setEnemyCorrectionMult] = useState(1)\n\n\tconst [highLevelEnemy,setHighLevelEnemy] = useState(1)\n\n\tuseEffect(()=>{\n\t\tsetMultipliers(Number(atkmult)*Number(partmult)*Number(elementalWeaknessMult)*Number(mainClassWeaponBoost)*Number(classSkillMult)*Number(equipMult)*Number(augmentEquipMult)*Number(potencyFloorEquipMult)*Number(elementalWeaponEquipMult)*Number(critMult)*Number(appropriateDistance)*Number(foodBoost)*Number(fieldEffects)*Number(statusAilments)*Number(enemyCorrectionMult)*Number(highLevelEnemy))\n\t},[atkmult,partmult,elementalWeaknessMult,mainClassWeaponBoost,classSkillMult,equipMult,augmentEquipMult,potencyFloorEquipMult,elementalWeaponEquipMult,critMult,appropriateDistance,foodBoost,fieldEffects,statusAilments,enemyCorrectionMult,highLevelEnemy])\n\n\treturn <>\n\t\t<div style={{background:\"rgba(200,255,200,1)\"}}>\n\t\t\tWeapon Total Atk:<EditStatBox value={weaponTotalAtk} callback={(val)=>{setWeaponTotalAtk(val)}}/>\n\t\t\t<ul>\n\t\t\t\t<li>●Weapon Base Atk:<EditStatBox value={weaponBaseAtk} callback={(val)=>{setWeaponBaseAtk(val)}}/></li>\n\t\t\t\t<li>●Weapon Enhance Lv:<EditStatBox value={weaponEnhanceLv} callback={(val)=>{setweaponEnhanceLv(val)}}/></li>\n\t\t\t</ul>\n\t\t\t<br/><br/><br/>\n\t\t\tDamage Variance:<EditStatBox value={dmgVariance} callback={(val)=>{setDmgVariance(val)}}/>\n\t\t\t<ul>\n\t\t\t\t<li>●Weapon Damage Variance:<EditStatBox value={weaponDmgVariance} callback={(val)=>{setWeaponDmgVariance(val)}}/></li>\n\t\t\t\t<li>●Augment Damage Variance:<EditStatBox value={augDmgVariance} callback={(val)=>{setAugDmgVariance(val)}}/></li>\n\t\t\t</ul>\n\t\t\t<br/><br/><br/>\n\t\t\tBase Attack:<EditStatBox value={baseAtk} callback={(val)=>{setBaseAtk(val)}}/>\n\t\t\tEnemy Defense:<EditStatBox value={enemyDef} callback={(val)=>{setEnemyDef(val)}}/>\n\t\t\tMultipliers:<EditStatBox value={multipliers} callback={(val)=>{setMultipliers(val)}}/>\n\t\t\t<ul>\n\t\t\t\t<li>●Atk Mult:<EditStatBox value={atkmult} callback={(val)=>{setAtkMult(val)}}/></li>\n\t\t\t\t<li>●Part Mult:<EditStatBox value={partmult} callback={(val)=>{setPartMult(val)}}/></li>\n\t\t\t\t<li>●Elemental Weakness Mult:<EditStatBox value={elementalWeaknessMult} callback={(val)=>{setElementalWeaknessMult(val)}}/></li>\n\t\t\t\t<li>●Main Class Weapon Boost:<EditStatBox value={mainClassWeaponBoost} callback={(val)=>{setMainClassWeaponBoost(val)}}/></li>\n\t\t\t\t<li>●Class Skill Mult:<EditStatBox value={classSkillMult} callback={(val)=>{setClassSkillMult(val)}}/></li>\n\t\t\t\t<li>●Equip Mult:<EditStatBox value={equipMult} callback={(val)=>{setEquipMult(val)}}/></li>\n\t\t\t\t<li>\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li>●Augment Equip Mult:<EditStatBox value={augmentEquipMult} callback={(val)=>{setAugmentEquipMult(val)}}/></li>\n\t\t\t\t\t\t<li>●Potency Floor Equip Mult:<EditStatBox value={potencyFloorEquipMult} callback={(val)=>{setPotencyFloorEquipMult(val)}}/></li>\n\t\t\t\t\t\t<li>●Elemental Weapon Equip Mult:<EditStatBox value={elementalWeaponEquipMult} callback={(val)=>{setElementalWeaponEquipMult(val)}}/></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t\t<li>●Crit Mult:<EditStatBox value={critMult} callback={(val)=>{setCritMult(val)}}/></li>\n\t\t\t\t<li>●Appropriate Distance:<EditStatBox value={appropriateDistance} callback={(val)=>{setAppropriateDistance(val)}}/></li>\n\t\t\t\t<li>●Food Boost:<EditStatBox value={foodBoost} callback={(val)=>{setFoodBoost(val)}}/></li>\n\t\t\t\t<li>●Field Effects:<EditStatBox value={fieldEffects} callback={(val)=>{setFieldEffects(val)}}/></li>\n\t\t\t\t<li>●Status Ailments:<EditStatBox value={statusAilments} callback={(val)=>{setStatusAilments(val)}}/></li>\n\t\t\t\t<li>●Enemy Correction Multiplier:<EditStatBox value={enemyCorrectionMult} callback={(val)=>{setEnemyCorrectionMult(val)}}/></li>\n\t\t\t\t<li>●High Level Enemy:<EditStatBox value={highLevelEnemy} callback={(val)=>{setHighLevelEnemy(val)}}/></li>\n\t\t\t</ul>\n\t\t\t<br/><br/><br/>\n\t\t\tRaw Dmg:{rawDmg}\n\t\t</div>\n\t</>\n}\n\nfunction FormField(p) {\n\treturn <><label className=\"formField\" for={p.field}>{p.label}</label>{\n\t\tp.type===\"toggle\"?<><Toggle id={p.field} checked={p.checked} onChange={p.onChange} disabled={p.loading}/> <label className=\"formDescription\" for={p.field}>{p.checked?<b>YES</b>:<b>NO</b>}</label></>:<input type={p.type??\"text\"} disabled={p.loading} id={p.field} maxlength={p.maxlength} value={p.value} checked={p.checked} onChange={p.onChange} placeholder={p.placeholder}/>} <label className=\"formDescription\" for={p.field}>{p.tooltip}</label></>\n}\n\nfunction VerifyLogin(p) {\n\taxios.post(GetBackendURL(p)+\"/validUser\",{\n\t\tusername:p.LOGGEDINUSER,\n\t\tpassword:p.LOGGEDINHASH,\n\t\trecoveryhash:cookies.get(\"userID\")\n\t})\n\t.then((data)=>{\n\t\tif (data.data.verified) {\n\t\t\tp.history.push(\"/\")\n\t\t}\n\t})\n\t.catch((err)=>{\n\t\tconsole.log(err.message)\n\t})\n}\n\nfunction LoginForm(p) {\n\n\tfunction useHashQuery() {\n\t\tconst urlSearchParams = new URLSearchParams(window.location.search);\n\t\tconst params = Object.fromEntries(urlSearchParams.entries());\n\t\treturn params\n\t}\n\n\tconst query = useHashQuery()\n\n\tconst [username,setUsername] = useState(\"\")\n\tconst [password,setPassword] = useState(\"\")\n\tconst [rememberMe,setRememberMe] = useState(false)\n\tconst [error,setError] = useState(\"\")\n\tconst [loading,setLoading] = useState(false)\n\tconst [message,setMessage] = useState(\"\")\n\n\tconst history = useHistory()\n\n\tuseEffect(()=>{\n\t\tVerifyLogin({...p,history:history})\n\t},[history,p])\n\n\tfunction SubmitLogin() {\n\t\tsetError(\"\")\n\t\tsetLoading(true)\n\t\taxios.post(GetBackendURL(p)+\"/validUser\",{\n\t\t\tusername:username,\n\t\t\tpassword:md5(password)\n\t\t})\n\t\t.then((data)=>{\n\t\t\tif (data.data.verified) {\n\t\t\t\tp.setLOGGEDINUSER(username)\n\t\t\t\tp.setLOGGEDINHASH(md5(password))\n\t\t\t\tcookies.set(\"username\",username,30,'d')\n\t\t\t\tcookies.set(\"password\",md5(password),30,'d')\n\t\t\t\tsetUsername(\"\")\n\t\t\t\tsetPassword(\"\")\n\t\t\t\tsetRememberMe(false)\n\t\t\t\thistory.push(\"/\")\n\t\t\t} else {\n\t\t\t\tsetError(\"Could not authenticate!\")\n\t\t\t}\n\t\t})\n\t\t.catch((err)=>{\n\t\t\tsetError(err?.message??err);\n\t\t})\n\t\t.then(()=>{\n\t\t\tsetLoading(false)\n\t\t})\n\t}\n\n\tfunction responseGoogle(response) {\n\t\t//setMessage(JSON.stringify(response))\n\t\tif (response.error) {\n\t\t\tsetMessage(JSON.stringify(response))\n\t\t} else \n\t\tif (response.profileObj.googleId&&\n\t\t\tresponse.profileObj.imageUrl&&\n\t\t\tresponse.profileObj.email&&\n\t\t\tresponse.profileObj.name&&\n\t\t\tresponse.tokenId){\n\t\t\taxios.post(GetBackendURL(p)+\"/registerUser\",{\n\t\t\t\tusername:response.profileObj.name,\n\t\t\t\temail:response.profileObj.email,\n\t\t\t\tpassword:response.tokenId,\n\t\t\t\tavatar:response.profileObj.imageUrl,\n\t\t\t\tuserID:response.profileObj.googleId,\n\t\t\t\trecoveryhash:response.profileObj.googleId\n\t\t\t})\n\t\t\t.then((data)=>{\n\t\t\t\tif (data.data.verified) {\n\t\t\t\t\tp.setLOGGEDINUSER(response.profileObj.name)\n\t\t\t\t\tp.setLOGGEDINHASH(response.tokenId)\n\t\t\t\t\tcookies.set(\"username\",response.profileObj.name,30,'d')\n\t\t\t\t\tcookies.set(\"password\",response.tokenId,30,'d')\n\t\t\t\t\tcookies.set(\"userID\",response.profileObj.googleId,30,'d')\n\t\t\t\t\tsetUsername(\"\")\n\t\t\t\t\tsetPassword(\"\")\n\t\t\t\t\tsetRememberMe(false)\n\t\t\t\t\thistory.push(\"/\")\n\t\t\t\t} else {\n\t\t\t\t\tcookies.remove(\"userID\")\n\t\t\t\t\tsetError(\"Could not authenticate!\")\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t }\n\n\tfunction DiscordLoginButton(){\n\n\t\tconst [checkForLogin,setCheckForLogin] = useState(false)\n\n\t\tconst history = useHistory()\n\n\t\tuseEffect(()=>{\n\t\t\tif (query.code) {\n\t\t\t\tsetCheckForLogin(true)\n\t\t\t}\n \t\t},[])\n\t\t\n\t\tuseEffect(()=>{\n\t\t\tif (checkForLogin) {\n\t\t\t\tconsole.log(\"Attempting login...\")\n\n\t\t\t\taxios.get(GetBackendURL(p)+\"/userData?token=\"+query.code)\n\t\t\t\t.then((data)=>{\n\t\t\t\t\tp.setLOGGEDINUSER(data.data.username)\n\t\t\t\t\tp.setLOGGEDINHASH(data.data.token)\n\t\t\t\t\tconsole.log(data.data.token)\n\t\t\t\t\tcookies.set(\"username\",data.data.username,30,'d')\n\t\t\t\t\tcookies.set(\"password\",data.data.token,30,'d')\n\t\t\t\t\tcookies.set(\"userID\",data.data.id,30,'d')\n\t\t\t\t\tconsole.log(cookies.get(\"username\"))\n\t\t\t\t\tconsole.log(cookies.get(\"password\"))\n\t\t\t\t\tconsole.log(cookies.get(\"userID\"))\n\t\t\t\t\treturn axios.post(GetBackendURL(p)+\"/registerUser\",{\n\t\t\t\t\t\tusername:data.data.username,\n\t\t\t\t\t\temail:data.data.email,\n\t\t\t\t\t\tpassword:data.data.token,\n\t\t\t\t\t\tavatar:\"https://cdn.discordapp.com/avatars/\"+data.data.id+\"/\"+data.data.avatar+\".png\",\n\t\t\t\t\t\tuserID:data.data.id,\n\t\t\t\t\t\trecoveryhash:data.data.id\n\t\t\t\t\t})\n\t\t\t\t\t//window.location.href=\"\"\n\t\t\t\t\t//console.log(data.data)\n\t\t\t\t})\n\t\t\t\t.then((data)=>{\n\t\t\t\t\t//window.location.href=\"\"\n\t\t\t\t\thistory.push(\"/\")\n\t\t\t\t})\n\t\t\t\t.catch((err)=>{\n\t\t\t\t\tconsole.log(err.message)\n\t\t\t\t})\n\t\t\t}\n\t\t},[checkForLogin,history])\n\t\t\t\n\t\treturn <>\n\t\t\t<button onClick={()=>{window.location.href=process.env.REACT_APP_LOCAL_REDIRECT?\"https://discord.com/api/oauth2/authorize?client_id=885738904685281291&redirect_uri=https%3A%2F%2Flocalhost%3A3000%23%2Flogin&response_type=code&scope=identify%20email\":\"https://discord.com/api/oauth2/authorize?client_id=885738904685281291&redirect_uri=https%3A%2F%2Fngsplanner.com%23%2Flogin&response_type=code&scope=identify%20email\"}}>Login</button>\n\t\t</>\n\t}\n\n\treturn <>\n\t<Box title=\"Login Form\">\n\t{loading?\n\t\t<img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\" style={{background:\"linear-gradient(white,#bca9f5)\",marginTop:\"10px\"}} />\n\t\t:<><div onKeyDown={(f)=>{if (f.key===\"Enter\") {SubmitLogin()}}}><h3 className=\"formError\">{error}</h3>\n\t\t<FormField field=\"username\" label=\"Username: \" value={username} maxlength={20} onChange={(p)=>{setUsername(p.currentTarget.value)}} placeholder=\"Username\"/><br/>\n\t\t<FormField field=\"password\" label=\"Password: \" type=\"password\" value={password} onChange={(p)=>{setPassword(p.currentTarget.value)}} placeholder=\"Password\"/><br/>\n\t\t<FormField field=\"rememberMe\" label=\"Remember Me \" type=\"toggle\" checked={rememberMe} onChange={(p)=>{setRememberMe(p.currentTarget.checked)}}/><br/>\n\t\t<button type=\"submit\" onClick={SubmitLogin}>Login</button></div>\n\t\t<hr/>\n\t\t{message}<br/>\n\t\t<GoogleLogin\n\t\t\ttheme=\"dark\"\n\t\t\tclientId=\"1081276553893-r50huhr0f9hkpcd7fdbb0oe4qcpglcpp.apps.googleusercontent.com\"\n\t\t\tbuttonText=\"Login\"\n\t\t\tonSuccess={responseGoogle}\n\t\t\tonFailure={responseGoogle}\n\t\t\tcookiePolicy={'single_host_origin'}\n\t\t/>\n\t\t<DiscordLoginButton/>\n\t\t</>\n\t}\n\t</Box></>\n}\n\nfunction RegisterForm(p) {\n\tconst [username,setUsername] = useState(\"\")\n\tconst [password,setPassword] = useState(\"\")\n\tconst [password2,setPassword2] = useState(\"\")\n\tconst [email,setEmail] = useState(\"\")\n\tconst [rememberMe,setRememberMe] = useState(false)\n\tconst [error,setError] = useState(\"\")\n\tconst [loading,setLoading] = useState(false)\n\n\tconst history = useHistory()\n\n\tuseEffect(()=>{\n\t\tVerifyLogin({...p,history:history})\n\t},[history,p])\n\n\tfunction SubmitRegister() {\n\t\tsetError(\"\")\n\t\tsetLoading(true)\n\t\ttry{\n\t\t\tif (username.length<4) {throw new Error(\"Username must be at least 4 characters in length.\")}\n\t\t\tif (username.length>20) {throw new Error(\"Username must be less than 21 characters in length.\")}\n\t\t\tif (password.length<6) {throw new Error(\"Password must contain at least 6 characters.\")}\n\t\t\tif (password!==password2) {throw new Error(\"Password fields must match.\")}\n\t\t\tif (!email.includes(\"@\")) {throw new Error(\"Invalid E-mail.\")}\n\t\t}catch(err){\n\t\t\tsetError(err?.message??err);\n\t\t\tsetLoading(false)\n\t\t\treturn\n\t\t}\n\t\taxios.post(GetBackendURL(p)+\"/register\",{\n\t\t\tusername:username,\n\t\t\tpassword:md5(password),\n\t\t\temail:email\n\t\t})\n\t\t.then((data)=>{\n\t\t\tif (data.data.verified) {\n\t\t\t\tp.setLOGGEDINUSER(username)\n\t\t\t\tp.setLOGGEDINHASH(md5(password))\n\t\t\t\tsetUsername(\"\")\n\t\t\t\tsetPassword(\"\")\n\t\t\t\tsetRememberMe(false)\n\t\t\t} else {\n\t\t\t\tsetError(\"Could not authenticate!\")\n\t\t\t}\n\t\t})\n\t\t.catch((err)=>{\n\t\t\tsetError(err?.message??err);\n\t\t})\n\t\t.then(()=>{\n\t\t\tsetLoading(false)\n\t\t})\n\t}\n\n\treturn <>\n\t<Box title=\"Registration Form\">\n\t{loading?\n\t\t<img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\" style={{background:\"linear-gradient(white,#bca9f5)\",marginTop:\"10px\"}} />\n\t\t:<><h3 className=\"formError\">{error}</h3>\n\t\t<FormField field=\"username\" label=\"Username: \" value={username} maxlength={20} onChange={(p)=>{setUsername(p.currentTarget.value)}} placeholder=\"Username\" tooltip=\"Enter a username (4-20 characters, a-z and _ only)\"/><br/>\n\t\t<FormField field=\"password\" label=\"Password: \" type=\"password\" value={password} onChange={(p)=>{setPassword(p.currentTarget.value)}} placeholder=\"Password\" tooltip=\"Enter a password (6 or more characters)\"/><br/>\n\t\t<FormField field=\"password2\" label=\"Verify Password: \" type=\"password\" value={password2} onChange={(p)=>{setPassword2(p.currentTarget.value)}} placeholder=\"Verify Password\" tooltip=\"Enter password again.\"/><br/>\n\t\t<FormField field=\"email\" label=\"E-mail: \" type=\"email\" value={email} onChange={(p)=>{setEmail(p.currentTarget.value)}} placeholder=\"email@example.com\" tooltip=\"This is used to send you password reset emails.\"/><br/>\n\t\t<FormField field=\"rememberMe\" label=\"Remember Me \" type=\"toggle\" checked={rememberMe} onChange={(p)=>{setRememberMe(p.currentTarget.checked)}}/><br/>\n\t\t<button type=\"submit\" onClick={SubmitRegister}>Login</button></>\n\t}\n\t</Box></>\n}\n\n\nfunction App() {\n\t\n\tconst [author] = useState(\"Dudley\")\n\tconst [buildName] = useState(\"Fatimah\")\n\tconst [className] = useState(\"Ranger\")\n\tconst [secondaryClassName] = useState(\"Force\")\n\tconst [classLv] = useState(20)\n\tconst [secondaryClassLv] = useState(15)\n\t\t\n\t\n\tconst [bp] = useState(1330)\n\tconst [hp] = useState(388)\n\tconst [pp] = useState(154)\n\tconst [weaponTotalAtk] = useState(282)\n\tconst [baseAtk] = useState(650)\n\tconst [statDisplayAtk,setstatDisplayAtk] = useState(282)\n\n\tuseEffect(()=>{\n\t\tsetstatDisplayAtk(Number(weaponTotalAtk)+Number(baseAtk))\n\t},[weaponTotalAtk,baseAtk])\n\n\tconst [def] = useState(932)\n\tconst [weaponUp1] = useState(0.317)\n\tconst [weaponUp2] = useState(0.241)\n\tconst [weaponUp3] = useState(0.241)\n\tconst [damageResist] = useState(0.18)\n\tconst [burnResist] = useState(0)\n\tconst [shockResist] = useState(0)\n\tconst [panicResist] = useState(0)\n\tconst [stunResist] = useState(0)\n\tconst [freezeResist] = useState(0)\n\tconst [blindResist] = useState(0)\n\tconst [poisonResist] = useState(0)\n\t\n\tconst [TESTMODE,setTESTMODE] = useState(false)\n\tconst [DATA,setDATA] = useState(undefined)\n\tconst [DATAID,setDATAID] = useState({GetData:()=>{}})\n\tconst [update,setUpdate] = useState(false)\n\n\tconst [LOGGEDINUSER,setLOGGEDINUSER] = useState(cookies.get(\"username\"))\n\tconst [LOGGEDINHASH,setLOGGEDINHASH] = useState(cookies.get(\"password\"))\n\n\tconst PANELPATHWBUILD = process.env.PUBLIC_URL+\"/test/:BUILDID\"\n\tconst PANELPATH = process.env.PUBLIC_URL+\"/test\"\n\n\tfunction GetData(table,row,col,id){\n\t\tif (row===undefined) {row=''}\n\t\tif (col===undefined) {col=''}\n\t\tvar data = id?DATAID:DATA\n\t\tif (!data) {\n\t\t\treturn \"no data\"\n\t\t} else {\n\t\t\treturn data!==undefined?data[table]!==undefined?data[table][row]!==undefined?data[table][row][col]!==undefined?data[table][row][col]:data[table][row]:data[table]:data:\"no data\"\n\t\t}\n\t}\n\t\n\tuseEffect(()=>{\n\t\tif (update) {\n\t\t\tsetUpdate(false)\n\t\t\taxios.get(GetBackendURL({TESTMODE:TESTMODE})+\"/data\")\n\t\t\t.then((data)=>{\n\t\t\t\tsetDATA(data.data)\n\t\t\t})\n\t\t\taxios.get(GetBackendURL({TESTMODE:TESTMODE})+\"/dataid\")\n\t\t\t.then((data)=>{\n\t\t\t\tsetDATAID(data.data)\n\t\t\t})\n\t\t}\n\t},[update,TESTMODE])\n\n\tuseEffect(()=>{\n\t\tsetLOGGEDINUSER(cookies.get(\"username\"))\n\t\tsetLOGGEDINHASH(cookies.get(\"password\"))\n\t\taxios.get(GetBackendURL({TESTMODE:TESTMODE})+\"/data\")\n\t\t.then((data)=>{\n\t\t\tsetDATA(data.data)\n\t\t})\n\t\taxios.get(GetBackendURL({TESTMODE:TESTMODE})+\"/dataid\")\n\t\t.then((data)=>{\n\t\t\tsetDATAID(data.data)\n\t\t})\n\t},[TESTMODE])\n\n return (\n \t<>\n\t\t<HashRouter>\n\t\t\t<Switch>\n\t\t\t\t<Route path={process.env.PUBLIC_URL+\"/admin\"}>\n\t\t\t\t\t<Helmet>\n\t\t\t\t\t\t<title>{APP_TITLE+\" - Admin Panel\"}</title>\n\t\t\t\t\t</Helmet>\n\t\t\t\t\t<AdminPanel setUpdate={setUpdate} setTESTMODE={setTESTMODE} BACKENDURL={BACKENDURL} TESTMODE={TESTMODE} DATA={GetData}/>\n\t\t\t\t</Route>\n\t\t\t\t<Route path={PANELPATHWBUILD}>\n\t\t\t\t\t<TestHeader\n\t\t\t\t\t\tLOGGEDINUSER={LOGGEDINUSER}\n\t\t\t\t\t\tLOGGEDINHASH={LOGGEDINHASH}\n\t\t\t\t\t\tBACKENDURL={GetBackendURL(BACKENDURL)}\n\t\t\t\t\t/>\n\t\t\t\t\t<TestPanel\n\t\t\t\t\tAPP_TITLE={APP_TITLE}\n\t\t\t\t\tpath={PANELPATHWBUILD}\n\t\t\t\t\tauthor={author} \n\t\t\t\t\tbuildName={buildName} \n\t\t\t\t\tclassName={className} \n\t\t\t\t\tsecondaryClassName={secondaryClassName}\n\t\t\t\t\tclassLv={classLv} \n\t\t\t\t\tsecondaryClassLv={secondaryClassLv} \n\t\t\t\t\tbp={bp} \n\t\t\t\t\thp={hp} \n\t\t\t\t\tpp={pp} \n\t\t\t\t\tdef={def} \n\t\t\t\t\tweaponUp1={weaponUp1} \n\t\t\t\t\tweaponUp2={weaponUp2} \n\t\t\t\t\tweaponUp3={weaponUp3} \n\t\t\t\t\tdamageResist={damageResist}\n\t\t\t\t\tburnResist={burnResist} \n\t\t\t\t\tshockResist={shockResist} \n\t\t\t\t\tpanicResist={panicResist} \n\t\t\t\t\tstunResist={stunResist} \n\t\t\t\t\tfreezeResist={freezeResist} \n\t\t\t\t\tblindResist={blindResist} \n\t\t\t\t\tpoisonResist={poisonResist} \n\t\t\t\t\tstatDisplayAtk={statDisplayAtk} \n\t\t\t\t\tGetData={GetData}\n\t\t\t\t\tLOGGEDINUSER={LOGGEDINUSER}\n\t\t\t\t\tLOGGEDINHASH={LOGGEDINHASH}\n\t\t\t\t\tBACKENDURL={GetBackendURL(BACKENDURL)}\n\t\t\t\t\t/>\n\t\t\t\t</Route>\n\t\t\t\t<Route path={PANELPATH}>\n\t\t\t\t\t<TestHeader\n\t\t\t\t\t\tLOGGEDINUSER={LOGGEDINUSER}\n\t\t\t\t\t\tLOGGEDINHASH={LOGGEDINHASH}\n\t\t\t\t\t\tBACKENDURL={GetBackendURL(BACKENDURL)}\n\t\t\t\t\t/>\n\t\t\t\t\t<TestPanel\n\t\t\t\t\tAPP_TITLE={APP_TITLE}\n\t\t\t\t\tpath={PANELPATH}\n\t\t\t\t\tauthor={author} \n\t\t\t\t\tbuildName={buildName} \n\t\t\t\t\tclassName={className} \n\t\t\t\t\tsecondaryClassName={secondaryClassName}\n\t\t\t\t\tclassLv={classLv} \n\t\t\t\t\tsecondaryClassLv={secondaryClassLv} \n\t\t\t\t\tbp={bp} \n\t\t\t\t\thp={hp} \n\t\t\t\t\tpp={pp} \n\t\t\t\t\tdef={def} \n\t\t\t\t\tweaponUp1={weaponUp1} \n\t\t\t\t\tweaponUp2={weaponUp2} \n\t\t\t\t\tweaponUp3={weaponUp3} \n\t\t\t\t\tdamageResist={damageResist}\n\t\t\t\t\tburnResist={burnResist} \n\t\t\t\t\tshockResist={shockResist} \n\t\t\t\t\tpanicResist={panicResist} \n\t\t\t\t\tstunResist={stunResist} \n\t\t\t\t\tfreezeResist={freezeResist} \n\t\t\t\t\tblindResist={blindResist} \n\t\t\t\t\tpoisonResist={poisonResist} \n\t\t\t\t\tstatDisplayAtk={statDisplayAtk} \n\t\t\t\t\tGetData={GetData}\n\t\t\t\t\tLOGGEDINUSER={LOGGEDINUSER}\n\t\t\t\t\tLOGGEDINHASH={LOGGEDINHASH}\n\t\t\t\t\tBACKENDURL={GetBackendURL(BACKENDURL)}\n\t\t\t\t\t/>\n\t\t\t\t</Route>\n\t\t\t\t<Route path={process.env.PUBLIC_URL+\"/login\"}>\n\t\t\t\t\t<Helmet>\n\t\t\t\t\t\t<title>{APP_TITLE+\" - Login\"}</title>\n\t\t\t\t\t</Helmet>\n\t\t\t\t\t<TestHeader\n\t\t\t\t\t\tLOGGEDINUSER={LOGGEDINUSER}\n\t\t\t\t\t\tLOGGEDINHASH={LOGGEDINHASH}\n\t\t\t\t\t\tBACKENDURL={GetBackendURL(BACKENDURL)}\n\t\t\t\t\t/>\n\t\t\t\t\t<LoginForm BACKENDURL={BACKENDURL} TESTMODE={TESTMODE} LOGGEDINUSER={LOGGEDINUSER} LOGGEDINHASH={LOGGEDINHASH} setLOGGEDINHASH={setLOGGEDINHASH} setLOGGEDINUSER={setLOGGEDINUSER}/>\n\t\t\t\t</Route>\n\t\t\t\t<Route path={process.env.PUBLIC_URL+\"/register\"}>\n\t\t\t\t\t<Helmet>\n\t\t\t\t\t\t<title>{APP_TITLE+\" - Register\"}</title>\n\t\t\t\t\t</Helmet>\n\t\t\t\t\t<TestHeader\n\t\t\t\t\t\tLOGGEDINUSER={LOGGEDINUSER}\n\t\t\t\t\t\tLOGGEDINHASH={LOGGEDINHASH}\n\t\t\t\t\t\tBACKENDURL={GetBackendURL(BACKENDURL)}\n\t\t\t\t\t/>\n\t\t\t\t\t<RegisterForm BACKENDURL={BACKENDURL} TESTMODE={TESTMODE} LOGGEDINUSER={LOGGEDINUSER} LOGGEDINHASH={LOGGEDINHASH} setLOGGEDINHASH={setLOGGEDINHASH} setLOGGEDINUSER={setLOGGEDINUSER}/>\n\t\t\t\t</Route>\n\t\t\t\t<Route path={process.env.PUBLIC_URL+\"/builds\"}>\n\t\t\t\t\t<Helmet>\n\t\t\t\t\t\t<title>{APP_TITLE+\" - Builds\"}</title>\n\t\t\t\t\t</Helmet>\n\t\t\t\t\t<TestHeader\n\t\t\t\t\t\tLOGGEDINUSER={LOGGEDINUSER}\n\t\t\t\t\t\tLOGGEDINHASH={LOGGEDINHASH}\n\t\t\t\t\t\tBACKENDURL={GetBackendURL(BACKENDURL)}\n\t\t\t\t\t/>\n\t\t\t\t\t<Builds \n\t\t\t\t\t\tGetData={GetData}\n\t\t\t\t\t\tBACKENDURL={GetBackendURL(BACKENDURL)}\n\t\t\t\t\t\tPANELPATHWBUILD={PANELPATHWBUILD}/>\n\t\t\t\t</Route>\n\t\t\t\t<Route path={process.env.PUBLIC_URL+\"/formula\"}>\n\t\t\t\t\t<DamageCalculator/>\n\t\t\t\t</Route>\n\t\t\t\t<Route path=\"/\">\n\t\t\t\t\t<Helmet>\n\t\t\t\t\t\t<title>{APP_TITLE}</title>\n\t\t\t\t\t</Helmet>\n\t\t\t\t<div className=\"modalOverlaySplash\">\n\t\t\t\t<div className=\"modal\">\n\t\t\t\t<div className=\"box boxMisc\">\n\t\t\t\t<div className=\"boxTitleBar\"><h1>{GetData(\"site_data\",\"h1\",\"data\")}</h1></div><h2>{GetData(\"site_data\",\"h2\",\"data\")}</h2><p><img src={process.env.PUBLIC_URL+\"/spinner.gif\"} alt=\"\"/>\n\t\t\t\t{GetData(\"site_data\",\"UNDER_CONSTRUCTION_TEXT\",\"data\")}</p><br style={{clear:\"both\"}} />\n\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<footer><a href=\"https://github.com/sigonasr2/ngsplanner/\"><span className=\"github\"> </span></a><a href=\"https://twitter.com/ngsplanner\"><span className=\"twitter\">@NGSPlanner</span></a></footer>\n\t\t\t\t</div>\n\t\t\t\t</Route>\n\t\t\t</Switch>\n\t\t</HashRouter>\n\t</>\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","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nconst rootElement = document.getElementById(\"root\");\n\nif (rootElement.hasChildNodes()) {\n ReactDOM.hydrate(<App />, rootElement);\n} else {\n ReactDOM.render(<App />, rootElement);\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":""} |