<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Loading...</title>
    <link
      href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"
      rel="stylesheet"
    />
    <link
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css"
      rel="stylesheet"
    />
    <style>
      body {
        background-color: #2b2b2b;
        color: #ffffff;
        overflow-x: hidden;
        overflow-y: scroll;
      }
      .container {
        text-align: center;
        margin-top: 50px;
      }

      .github-button-container {
        position: absolute;
        top: 10px;
        right: 10px;
      }

      .github-button-container a.btn {
        color: #ffffff;
        border-color: #ffffff;
      }

      .github-button-container a.btn:hover {
        background-color: #ffffff;
        color: #000000;
      }
      #info {
        text-align: left;
        min-width: 50vw;
      }
      details {
        text-align: left;
        padding: 6px;
        border-radius: 1rem;
        background-color: rgba(0, 0, 0, 0.5);
        margin-bottom: 1rem;
      }
      summary {
        background-color: rgba(255, 255, 255, 0.1);
        padding: 4px;
        border-radius: 0.6rem;
        padding-left: 8px;
      }
      h6 {
        font-weight: normal;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <h1>EaglerForge Injector</h1>
      <div class="github-button-container">
        <a
          href="https://github.com/eaglerforge/EaglerForgeInjector"
          class="btn btn-default"
          target="_blank"
        >
          <i class="fab fa-github"></i> GitHub
        </a>
      </div>
      <h6>
        Adds ModAPI with more functionality (adds hooking into functions,
        exposes all classes, etc) to unminified unobfuscated EaglercraftX
        offline downloads (web support coming soon).
      </h6>
      <br />
      <div class="custom-file mb-3">
        <input
          class="custom-file-input"
          type="file"
          id="htmlFile"
          accept=".html,.js"
        />
        <label class="custom-file-label" for="htmlFile"
          >Choose .html file...</label
        >
        <br />
        <span>
        <label>Minify:&nbsp;</label><input type="checkbox" oninput="globalThis.doShronk = this.checked">
            &nbsp;&nbsp;&nbsp;
        <label>MinifyExtras:&nbsp;</label><input type="checkbox" oninput="globalThis.doShronkPlus = this.checked">
            &nbsp;&nbsp;&nbsp;
        <label>EaglerForge:&nbsp;</label><input checked type="checkbox" oninput="globalThis.doEaglerforge = this.checked">
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code id="status">Awaiting input...</code></span>
        <br /><br />
        <button class="btn btn-primary" id="giveme">Make modded client</button>
        <button class="btn btn-primary" id="givemeserver">
          Make modded server (Indev)
        </button>
      </div>

      <br /><br /><br />
      <span>Info:</span>
      <div id="#info">
        <details>
          <summary>
            Where can I download an unobfuscated unsigned Eaglercraft build?
          </summary>
          <a
            href="https://github.com/Eaglercraft-Archive/unminified-eaglercraft-builds/releases/latest"
            >https://github.com/Eaglercraft-Archive/unminified-eaglercraft-builds/releases/latest</a
          >
        </details>
        <details>
          <summary>
            How do I compile my own unobfuscated unsigned Eaglercraft build?
          </summary>
          <a href="docs/compiling_client">tutorial here</a>
        </details>
        <details>
          <summary>How does this tool work?</summary>
          The injector works by analysing your uploaded file for patterns that
          appear in TeaVM's compiled JavaScript code. Then, it will replace all
          functions with proxies to the original code, which it moves into
          <code>ModAPI.hooks.methods</code>. It does similar things with static
          properties and constructors, and then hooks into
          <code>$rt_metadata</code> to access auxilary information.
        </details>
        <details>
          <summary>Where documentation???</summary>
          <a href="https://eaglerforge.github.io/EaglerForgeInjector/docs"
            >https://eaglerforge.github.io/EaglerForgeInjector/docs</a
          >
        </details>
      </div>
    </div>

    <!-- Libraries -->
    <script src="libs/babel.min.js"></script>
    <script src="libs/filesaver.min.js"></script>

    <script>
      document.querySelector("#htmlFile").addEventListener("input", (e) => {
        if (e.target.files[0]) {
          document.querySelector(".custom-file-label").innerText =
            e.target.files[0].name;
        }
      });
      var modapi_preinit = `globalThis.ModAPI ||= {};
          ModAPI.hooks ||= {};
          ModAPI.hooks.freezeCallstack = false;
          ModAPI.hooks._rippedData ||= [];
          ModAPI.hooks._rippedInterfaceMap ||= {};
          ModAPI.hooks._teavm ||= {};
          ModAPI.hooks._rippedConstructors ||= {};
          ModAPI.hooks._rippedInternalConstructors ||= {};
          ModAPI.hooks.methods ||= {};
          ModAPI.hooks._rippedMethodTypeMap ||= {};
          ModAPI.hooks._postInit ||= ()=>{};
          ModAPI.hooks._rippedStaticProperties ||= {};
          ModAPI.hooks._rippedStaticIndexer ||= {};
      `;
      var freezeCallstack = `if(ModAPI.hooks.freezeCallstack){return false};`;
    </script>
    <script src="backgroundLogger.js"></script>
    <script src="patches.js"></script>
    <script src="injector.minify.js"></script>
    <script src="injector.js"></script>

    <!-- Code assets -->
    <script src="postinit.js"></script>
    <script src="modloader.js"></script>
    <script src="modgui.js"></script>
    <script src="efserver.js"></script>
  </body>
</html>