Build planner for PSO2: New Genesis.
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.
 
 
 
ngsplanner/static/js/main.8e1b70b5.chunk.js.map

1 lines
201 KiB

{"version":3,"sources":["skilltree/skillTree.js","skilltree/skillTreeSelector.js","skilltree/skillTreeEditor.js","DEFAULTS.js","TestHeader.js","components/ExpandTooltip.js","TestPanel.js","App.js","reportWebVitals.js","index.js"],"names":["SkillTree","p","canvasRef","useRef","useState","width","setWidth","height","setHeight","useEffect","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","style","className","children","SkillTreeSelector","GetData","skillList","setSkillList","cl","onChange","f","callback","currentTarget","value","Number","position","left","ADJUSTMENT","top","defaultValue","map","ch","skillCallback","skill","Object","keys","filter","class_id","id","name","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","length","undefined","found","data","skill_data","line_color","line_width","gridsizex","gridsizey","gridpaddingx","gridpaddingy","skillTreeString","push","repeat","controls","string","stringLine","newSkillData","s","join","newSkill","src","alt","htmlFor","isNaN","c","onClick","axios","post","BACKENDURL","pass","password","slice","str","then","color","setUpdate","catch","err","control","i","Fragment","type","DisplayIcon","icon","includes","process","require","cookies","TestHeader","LOGGEDINUSER","LOGGEDINHASH","avatar","setAvatar","username","setUsername","recoveryhash","get","verified","finally","href","showLoadingAnimation","ready","rows","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","page","currentPage","pageDisplay","PageControl","pages","pageNames","Class","CLASSES","class_obj","EditableClass","setClassNameSetter","editClass","setClassSelectWindowOpen","PopupWindow","ariaHideApp","isOpen","modalOpen","onRequestClose","setModalOpen","shouldFocusAfterRender","shouldCloseOnOverlayClick","shouldCloseOnEsc","overlayClassName","title","showCloseButton","setPage","SelectorWindow","onModalOpen","itemList","setItemList","tabPage","setTabPage","sortItems","sortSelector","setSortSelector","setFilter","dataFunction","item","placeholder","filterFunction","searchFieldFunction","sort","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","level","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","secondaryLevel","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","rarityCheck","v","bp","pointsArr","pointsDataArr","creator","build_name","class1","class2","dat","JSON","parse","weapon_type","weaponType","weapon","weaponBaseName","potential","potential_id","potential_all","potential_tooltip","pot","existence_data","Array","isArray","weapon_existence_data","weapon_type_id","weapon_id","armor1Name","armor2Name","armor3Name","console","log","boost_prefixes","boost_suffixes","categories","forEach","count","amount","finalObj","from","CalculateBuffs","Helmet","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","replace","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","to","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","for","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","PANELPATHWBUILD","PANELPATH","row","clear","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","StrictMode"],"mappings":"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","file":"static/js/main.8e1b70b5.chunk.js","sourcesContent":["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}","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 React, { useEffect,useState } from 'react';\nimport { DisplayIcon } from './DEFAULTS';\nimport ReactPlaceholder from 'react-placeholder';\nimport \"react-placeholder/lib/reactPlaceholder.css\";\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'} />&emsp;NGS<span>planner</span></a></div>\n <div className=\"navigation\"><ul>\n <li className=\"headerMenuItem\"><a href=\".\">Builds</a></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=\".\">&#9776;</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\"} &emsp; <span className=\"dotMenu\">&#xb7;&#xb7;&#xb7;</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\";\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 Class(p) {\n const CLASSES = p.GetData(\"class\")\n\tconst class_obj = CLASSES[p.name]\n\treturn <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}/>{class_obj.name}</>:<></>}</ReactPlaceholder>\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\">&nbsp;</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\nfunction SaveData() {\n var saveObj = {\n level:level,\n secondaryLevel:secondaryLevel,\n weaponBaseName:selectedWeapon[WEAPON_WEAPON]?.name,\n weaponType:selectedWeapon[WEAPON_WEAPONTYPE]?.name,\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 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 }\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 </Helmet>\n<div className=\"main\">\n <div className=\"containerA\">\n\n\n\n <div className=\"box basicInfoBox\">\n <div className=\"boxTitleBar\">\n <h1>Basic Information</h1></div>\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)+\"%)\"}}>&nbsp;</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)+\"%)\"}}>&nbsp;</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)+\"%)\"}}>&nbsp;</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)+\"%)\"}}>&nbsp;</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)+\"%)\"}}>&nbsp;</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></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])}><span>1</span><img alt=\"\" className=\"r4\" src={DisplayIcon(selectedWeapon[WEAPON_EXISTENCE_DATA]?.icon)} /></div></div>\n <div onClick={()=>{setArmorSlotSelection(1);setArmorSelectWindowOpen(true)}} className={\"equipPaletteSlot\"+rarityCheck(selectedArmor1)}><h3>Armor 1</h3><div className=\"equipPaletteSlotWrapper\"><img alt=\"\" className=\"r3\" src={DisplayIcon(selectedArmor1.icon)} /></div></div>\n <div onClick={()=>{setArmorSlotSelection(2);setArmorSelectWindowOpen(true)}} className={\"equipPaletteSlot\"+rarityCheck(selectedArmor2)}><h3>Armor 2</h3><div className=\"equipPaletteSlotWrapper\"><img alt=\"\" className=\"r3\" src={DisplayIcon(selectedArmor2.icon)} /></div></div>\n <div onClick={()=>{setArmorSlotSelection(3);setArmorSelectWindowOpen(true)}} className={\"equipPaletteSlot\"+rarityCheck(selectedArmor3)}><h3>Armor 3</h3><div className=\"equipPaletteSlotWrapper\"><img alt=\"\" className=\"r3\" src={DisplayIcon(selectedArmor3.icon)} /></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\"} 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\"} 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\" />&ensp;[{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\" />&ensp;Potency +5.0%</li>\n <li><img alt=\"\" src=\"https://i.imgur.com/VIYYNIm.png\" />&ensp;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\" />&ensp;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 <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 </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\">&nbsp;</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\"}}>&nbsp;</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'\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&nbsp;&nbsp;&nbsp;<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+\"/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\">&nbsp;</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\nReactDOM.render(\n <React.StrictMode>\n <App />\n </React.StrictMode>,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}