//import './App.css'; Old CSS import './reset.css'; // Generic reset import './style.css'; // The new new import React, {useState,useEffect,useRef,useReducer} from 'react'; import ReactWindow from 'reactjs-windows' import 'reactjs-windows/dist/index.css' import {XSquareFill} from 'react-bootstrap-icons' import { HashRouter, Switch, Route } from "react-router-dom"; import { HashLink as Link } from 'react-router-hash-link'; import TestHeader from './TestHeader'; // Test Header! import TestPanel from './TestPanel'; // Dudley's Test Panel const axios = require('axios'); const BACKEND_URL = 'https://projectdivar.com:4504'; function Col(p) { return
{p.children}
} function Box(p) { return <>

♦ {p.title}

{p.children}
} function EditBox(p) { useEffect(()=>{ var timer1 = setTimeout(()=>{document.getElementById("editBox").focus()},100) return () => { clearTimeout(timer1); }; }) return { if (e.key==="Enter") {p.setEdit(false)} else if (e.key==="Escape") {p.setEdit(false)} }} maxLength={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)}}> } function EditableBox(p) { const [edit,setEdit] = useState(false) useEffect(()=>{ if (p.callback) { p.callback() } },[edit,p]) return <>
{setEdit(true)}}> {edit? :<>{p.data}}
} const CLASSES = { HUNTER:{ name:"Hunter", icon:process.env.PUBLIC_URL+"/icons/UINGSClassHu.png" }, FIGHTER:{ name:"Fighter", icon:process.env.PUBLIC_URL+"/icons/UINGSClassFi.png" }, RANGER:{ name:"Ranger", icon:process.env.PUBLIC_URL+"/icons/UINGSClassRa.png" }, GUNNER:{ name:"Gunner", icon:process.env.PUBLIC_URL+"/icons/UINGSClassGu.png" }, FORCE:{ name:"Force", icon:process.env.PUBLIC_URL+"/icons/UINGSClassFo.png" }, TECHTER:{ name:"Techter", icon:process.env.PUBLIC_URL+"/icons/UINGSClassTe.png" } } const EFFECTS = { "Food Boost Effect":{ perks:[ "[Meat] Potency +10.0%", "[Crisp] Potency to Weak Point +5.0%" ], icon:process.env.PUBLIC_URL+"/icons/TQ8EBW2.png" }, "Shifta / Deband":{ perks:[ "Potency +5.0%", "Damage Resistance +10.0%" ], icon:process.env.PUBLIC_URL+"/icons/VIYYNIm.png" }, "Region Mag Boost":{ perks:[ "Potency +5.0%", ], icon:process.env.PUBLIC_URL+"/icons/N6M74Qr.png" }, } const EQUIPMENT = { "Ophistia Shooter":{ icon:process.env.PUBLIC_URL+"/icons/uc1iBck.png" }, "Klauzdyne":{ icon:process.env.PUBLIC_URL+"/icons/uldt9lR.png" }, "Klauznum":{ icon:process.env.PUBLIC_URL+"/icons/F0t58xP.png" }, "Klauzment":{ icon:process.env.PUBLIC_URL+"/icons/20M6Z7t.png" } } const ABILITIES = { "Wellspring Unit Lv.3":{ icon:process.env.PUBLIC_URL+"/icons/NGSUIItemPotentialAbility.png" }, "Fixa Fatale Lv.5":{ icon:process.env.PUBLIC_URL+"/icons/UINGSItemPresetAbility.png" } } const ABILITY_DEFAULT_ICON = process.env.PUBLIC_URL+"/icons/UINGSItemSpecialAbility.png" /** * Hook that alerts clicks outside of the passed ref */ function useOutsideAlerter(ref,setEdit) { useEffect(() => { /** * Alert if clicked on outside of element */ function handleClickOutside(event) { if (ref.current && !ref.current.contains(event.target)) { setEdit(false) } } // Bind the event listener document.addEventListener("mousedown", handleClickOutside); return () => { // Unbind the event listener on clean up document.removeEventListener("mousedown", handleClickOutside); }; }, [ref,setEdit]); } function Class(p) { const class_obj = CLASSES[p.name] return <>{class_obj.name} } function ClassSelector(p){ const wrapperRef = useRef(null); useOutsideAlerter(wrapperRef,p.setEdit); return
Class Selector
{Object.keys(CLASSES).map((cl,i)=>{ return })}
/*return This is a test window. */ } function EditableClass(p){ const [edit,setEdit] = useState(false) return <>{setEdit(!edit)}}> {edit&&} } function Table(p) { return {p.children}
} function MainBox(p) { return }>Lv.20}>Lv.15
} function StatsBox(p) { return +{p.weaponUp1*100}%}> +{p.weaponUp2*100}% +{p.weaponUp3*100}%}>
} function EffectListing(p) { return
  • {p.name}
  • } function PageControlButton(p) { return
  • {p.setCurrentPage(p.page)}} className={(p.currentPage===p.page)?"selected":""}>{p.pageName?p.pageName:p.page}
  • } function PageControl(p) { var pages = [] for (var i=0;i) } return } function EffectsBox(p) { const [currentPage,setCurrentPage]=useState(1) return

    Effect Name

    { currentPage===1?
      {p.effectList.map((ef,i)=>{ return })}
    : <> }
    } function EquipBox(p) { return

    Weapon



    {p.weapon}+{p.weaponEnhancementLv}

    Slot 1



    {p.armorSlot1}+{p.armorSlot1EnhancementLv}

    Slot 2



    {p.armorSlot2}+{p.armorSlot2EnhancementLv}

    Slot 3



    {p.armorSlot3}+{p.armorSlot3EnhancementLv}
    } function EquippedWeaponBox(p) { const [currentPage,setCurrentPage] = useState(1) const [selectedEquip,setSelectedEquip] = useState(p.weapon) const [selectedEquipEnhancementLv,setSelectedEquipEnhancementLv] = useState(p.weaponEnhancementLv) const [selectedEquipAbilities,setSelectedEquipAbilities] = useState(p.weaponAbilityList) useEffect(()=>{ switch (currentPage) { case 2: setSelectedEquip(p.armorSlot1) setSelectedEquipEnhancementLv(p.armorSlot1EnhancementLv) setSelectedEquipAbilities(p.armorSlot1AbilityList) break; case 3: setSelectedEquip(p.armorSlot2) setSelectedEquipEnhancementLv(p.armorSlot2EnhancementLv) setSelectedEquipAbilities(p.armorSlot2AbilityList) break; case 4: setSelectedEquip(p.armorSlot3) setSelectedEquipEnhancementLv(p.armorSlot3EnhancementLv) setSelectedEquipAbilities(p.armorSlot3AbilityList) break; default:{ setSelectedEquip(p.weapon) setSelectedEquipEnhancementLv(p.weaponEnhancementLv) setSelectedEquipAbilities(p.weaponAbilityList) } } },[currentPage,p.armorSlot1,p.armorSlot1EnhancementLv,p.armorSlot1AbilityList,p.armorSlot2,p.armorSlot2EnhancementLv,p.armorSlot2AbilityList,p.armorSlot3,p.armorSlot3EnhancementLv,p.armorSlot3AbilityList,p.weapon,p.weaponEnhancementLv,p.weaponAbilityList]) return

    {selectedEquip}+{selectedEquipEnhancementLv}

    Abilitiy Details

      { selectedEquipAbilities?selectedEquipAbilities.map((ability,i)=>{ return
    • {ability}
    • }):<> }

    Properties

    • Enhancement Lv. +{selectedEquipEnhancementLv}
    • Multi-Weapon -
    • Element -
    } function DamageBox(p) { const [currentPage,setCurrentPage] = useState(1) return

    { currentPage===1&& {p.criticalHitRate*100}%{p.criticalMultiplier*100}%{p.midRange}{p.critical}{p.effective}
    }
    } function ListRow(p) { return {p.title} {p.content} {p.children} } function PopupWindow(p) { return This is a test window. } function EditBackendBox(p) { useEffect(()=>{ var timer1 = setTimeout(()=>{document.getElementById("editBox").focus()},100) return () => { clearTimeout(timer1); }; }) return { if (e.key==="Enter") {p.setEdit(false);p.setUpdate(true)} else if (e.key==="Escape") {p.setEdit(false)} }} maxLength={p.maxlength?p.maxlength:20} onBlur={()=>{p.setEdit(false);p.setUpdate(true)}} value={p.value} onChange={(f)=>{f.currentTarget.value.length>0?p.setName(f.currentTarget.value):p.setName(p.originalName)}}> } function EditableBackendBox(p) { const [update,setUpdate] = useState(false) const [edit,setEdit] = useState(false) const [value,setValue] = useState(p.children) const [originalValue,setOriginalValue] = useState(p.children) useEffect(()=>{ if (p.callback&&update) { p.callback(value) .then(()=>{ setUpdate(false) setOriginalValue(value) }) .catch(()=>{ setUpdate(false) setValue(originalValue) }) } },[update,originalValue,p,value]) return <>
    {setEdit(true)}}> {edit? :<>{value}}
    } function TableEditor(p) { const initialVals={} function updateVals(state,update) { if (update==='Clear') { return initialVals } state[update.field]=update.value return state } const [fields,setFields] = useState([]) const [data,setData] = useState([]) const [update,setUpdate] = useState(false) const [submitVals,setSubmitVal] = useReducer(updateVals,initialVals) function SubmitBoxes() { axios.post(BACKEND_URL+p.path,submitVals) .then(()=>{ setUpdate(true) }) .catch((err)=>{ alert(JSON.stringify(err.response.data)) }) } useEffect(()=>{ setUpdate(true) },[p.path]) useEffect(()=>{ if (update) { axios.get(BACKEND_URL+p.path) .then((data)=>{ var cols = data.data.fields var rows = data.data.rows setFields(cols.filter((col)=>col.name!=="id").map((col)=>col.name)) setData(rows) }) setUpdate(false) } },[update,p.path]) return <>
    {fields.map((field,i)=>)} {data.map((dat)=>{fields.map((col,i)=>)})} {{fields.map((col,i)=>)}}
    List of users
    {field}
    {axios.delete(BACKEND_URL+p.path,{data:{id:dat.id}}).then(()=>{setUpdate(true)}).catch((err)=>{alert(err.response.data)})}}/>{ return axios.patch(BACKEND_URL+p.path,{ [col]:value, id:dat.id }) }}>{String(dat[col])}
    {{setSubmitVal({field:col,value:f.currentTarget.value});SubmitBoxes();document.getElementById("submitField0").focus()}:(f)=>{setSubmitVal({field:col,value:f.currentTarget.value})}}/>}
    } function AdminPanel(p) { return
    Class
    Class Data
    Class-Weapon Compatibility

    Weapons
    Weapon Existence Data
    Weapon Types
    Class-Weapon Compatibility

    Armor
    Potentials
    Potential Data

    Builds

    Skills
    Skill Types
    Skill Data

    Augments
    Augment Types

    Food
    Food Multipliers

    Roles

    Users
    } function App() { const [author,setAuthor] = useState("Dudley") const [buildName,setBuildName] = useState("Fatimah") const [className,setClassName] = useState("RANGER") const [secondaryClassName,setSecondaryClassName] = useState("FORCE") const [bp,setBP] = useState(1344) const [hp,setHP] = useState(289) const [pp,setPP] = useState(100) const [def,setDef] = useState(402) const [weaponUp1,setWeaponUp1] = useState(0.34) const [weaponUp2,setWeaponUp2] = useState(0.34) const [weaponUp3,setWeaponUp3] = useState(0.34) const [damageResist,setDamageResist] = useState(0.18) const [effectList,setEffectList] = useState([ "Food Boost Effect", "Shifta / Deband", "Region Mag Boost" ]) const [weapon,setWeapon] = useState("Ophistia Shooter") const [armorSlot1,setArmorSlot1] = useState("Klauzdyne") const [armorSlot2,setArmorSlot2] = useState("Klauznum") const [armorSlot3,setArmorSlot3] = useState("Klauzment") const [weaponEnhancementLv,setWeaponEnhancementLv] = useState(35) const [armorSlot1EnhancementLv,setArmorSlot1EnhancementLv] = useState(10) const [armorSlot2EnhancementLv,setArmorSlot2EnhancementLv] = useState(10) const [armorSlot3EnhancementLv,setArmorSlot3EnhancementLv] = useState(10) const [weaponAbilityList,setWeaponAbilityList] = useState([ "Wellspring Unit Lv.3", "Fixa Fatale Lv.5", "Legaro S Attack II", "Legaro S Efficiet", "Legaro S Efficiet", "Legaro Souls 2", "Legaro Reverij", "Legaro Factalz", "Legaro Crakus", "Legaro Attack Vaz III", ]) const [armor1AbilityList,setArmor1AbilityList] = useState([]) const [armor2AbilityList,setArmor2AbilityList] = useState([]) const [armor3AbilityList,setArmor3AbilityList] = useState([]) const [criticalHitRate,setCriticalHitRate] = useState(0.05) const [criticalMultiplier,setCriticalMultiplier] = useState(1.2) const [midRange,setMidRange] = useState(126) const [critical,setCritical] = useState(152) const [effective,setEffective] = useState(127) return ( <>
    ); } export default App;