Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions proguard.conf
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@
public static ** valueOf(java.lang.String);
}

# The web export uses some tricky reflection
-keep class guideme.internal.web.* {
*;
}

# Keep the site export
-keep class guideme.internal.web.StaticSiteGenerator {
static void main(java.lang.String[]);
Expand Down
9 changes: 9 additions & 0 deletions src/main/java/guideme/internal/siteexport/SiteExporter.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import guideme.internal.siteexport.mdastpostprocess.PageExportPostProcessor;
import guideme.internal.util.Platform;
import guideme.navigation.NavigationNode;
import guideme.siteexport.AdditionalResourceExporter;
import guideme.siteexport.ExportableResourceProvider;
import guideme.siteexport.RecipeExporter;
import guideme.siteexport.ResourceExporter;
Expand Down Expand Up @@ -407,6 +408,14 @@ public void export() throws Exception {
ExportableResourceProvider.visit(compiledPage.document(), SiteExporter.this);
}

for (var additionalResourceExporter : guide.getExtensions().get(AdditionalResourceExporter.EXTENSION_POINT)) {
additionalResourceExporter.addResources(guide, this);
}

for (var entry : extraData.entrySet()) {
indexWriter.addModData(entry.getKey().toString(), entry.getValue());
}

dumpRecipes(indexWriter);

processItems(client, indexWriter, outputFolder);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
package guideme.internal.siteexport.model;

public class FluidInfoJson {
import guideme.siteexport.web.ExportedFluidInfo;

public class FluidInfoJson implements ExportedFluidInfo {
public String id;
public String displayName;
public String icon;

@Override
public String icon() {
return icon;
}

@Override
public String displayName() {
return displayName;
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,20 @@
package guideme.internal.siteexport.model;

import guideme.siteexport.ExportedItemInfo;
import guideme.siteexport.web.ExportedItemInfo;

public class ItemInfoJson implements ExportedItemInfo {
public String id;
public String displayName;
public String rarity;
public String icon;

@Override
public String icon() {
return icon;
}

@Override
public String displayName() {
return displayName;
}
}
1 change: 1 addition & 0 deletions src/main/java/guideme/internal/web/AttributeMapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import guideme.libs.mdast.mdx.model.MdxJsxAttribute;
import guideme.libs.mdast.mdx.model.MdxJsxElementFields;
import guideme.siteexport.DefaultValue;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.RecordComponent;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package guideme.internal.web;

import guideme.libs.mdast.mdx.model.MdxJsxElementFields;
import guideme.libs.mdast.model.MdAstParent;
import guideme.siteexport.web.CustomElementWebRenderingContext;

class CustomElementWebRenderingContextImpl extends WebRenderingContextImpl implements CustomElementWebRenderingContext {
private final MdxJsxElementFields fields;

public CustomElementWebRenderingContextImpl(WebPageCompiler webPageCompiler,
WebPageCompileContext context,
MdxJsxElementFields fields,
MdAstParent<?> node) {
super(context, webPageCompiler, node);
this.fields = fields;
}

@Override
public String tagName() {
return fields.name();
}

@Override
public MdxJsxElementFields element() {
return fields;
}

@Override
public <T extends Record> T map(Class<T> modelClass) {
return JsxAttributeMapper.map(fields, modelClass);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

import com.google.gson.JsonElement;
import guideme.internal.siteexport.model.ExportedPageJson;
import guideme.internal.siteexport.model.FluidInfoJson;
import guideme.internal.siteexport.model.IndexModel;
import guideme.internal.siteexport.model.ItemInfoJson;
import guideme.internal.siteexport.model.NavigationNodeJson;
import guideme.internal.siteexport.model.SiteExportJson;
import guideme.siteexport.web.ExportedGuide;
import java.net.URI;
import java.nio.file.Path;
import java.util.ArrayList;
Expand All @@ -16,7 +18,7 @@
import java.util.function.BiConsumer;
import org.jspecify.annotations.Nullable;

class ExportedGuide {
class ExportedGuideImpl implements ExportedGuide {
private final IndexModel index;
private final SiteExportJson json;
private final Map<String, String> pageByItemIndex = new HashMap<>();
Expand All @@ -30,7 +32,7 @@ class ExportedGuide {

private final Map<String, List<ExportedRecipe>> recipesByResult = new HashMap<>();

public ExportedGuide(IndexModel index, SiteExportJson json) {
public ExportedGuideImpl(IndexModel index, SiteExportJson json) {
this.index = index;
this.json = json;

Expand Down Expand Up @@ -91,6 +93,7 @@ private void visitIndex(String indexName, BiConsumer<String, JsonElement> visito
}
}

@Override
public String getDefaultNamespace() {
return json.defaultNamespace;
}
Expand Down Expand Up @@ -211,12 +214,13 @@ public String getPageUrlForItem(String itemId) {
return this.pageByItemIndex.get(itemId);
}

@Nullable
public ItemInfoJson tryGetItemInfo(String itemId) {
@Override
public @Nullable ItemInfoJson tryGetItemInfo(String itemId) {
itemId = this.resolveId(itemId);
return json.items.get(itemId);
}

@Override
public ItemInfoJson getItemInfo(String itemId) {
var item = tryGetItemInfo(itemId);
if (item == null) {
Expand All @@ -225,6 +229,26 @@ public ItemInfoJson getItemInfo(String itemId) {
return item;
}

@Override
public @Nullable FluidInfoJson tryGetFluidInfo(String fluidId) {
fluidId = this.resolveId(fluidId);
return json.fluids.get(fluidId);
}

@Override
public FluidInfoJson getFluidInfo(String fluidId) {
var fluid = tryGetFluidInfo(fluidId);
if (fluid == null) {
throw new IllegalArgumentException("Couldn't find fluid '" + fluidId + "'");
}
return fluid;
}

@Override
public Object getExtraData(String identifier) {
return json.modData.get(identifier);
}

public String getGuideTitle() {
return "Applied Energistics 2";
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/guideme/internal/web/ExportedRecipe.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import com.google.gson.JsonObject;
import java.util.Map;

record ExportedRecipe(String id, JsonObject recipe) implements guideme.siteexport.ExportedRecipe {
record ExportedRecipe(String id, JsonObject recipe) implements guideme.siteexport.web.ExportedRecipe {
public String type() {
return recipe.getAsJsonPrimitive("type").getAsString();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package guideme.internal.web;

import guideme.siteexport.DefaultValue;
import org.jspecify.annotations.Nullable;

public record GameSceneAttributes(
Expand Down
32 changes: 1 addition & 31 deletions src/main/java/guideme/internal/web/HtmlUtils.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
package guideme.internal.web;

import java.util.Map;
import java.util.Set;
import org.jspecify.annotations.Nullable;

final class HtmlUtils {
static String escapeHtml(String text) {
if (text == null) {
Expand All @@ -17,7 +13,7 @@ static String escapeHtml(String text) {
.replace("'", "&#39;");
}

static String escapeAttribute(String text) {
public static String escapeAttribute(String text) {
if (text == null) {
return "";
}
Expand All @@ -27,32 +23,6 @@ static String escapeAttribute(String text) {
.replace("'", "&#39;");
}

private static final Set<String> VOID_ELEMENTS = Set.of("area", "base", "br", "col", "embed", "hr", "img", "input",
"link", "meta", "source", "track", "wbr");

static String createHtmlElement(String tag, Map<String, Object> attributes) {
return createHtmlElement(tag, attributes, null);
}

static String createHtmlElement(String tag, Map<String, Object> attributes, @Nullable String content) {
StringBuilder sb = new StringBuilder();
sb.append("<").append(tag);
for (var entry : attributes.entrySet()) {
sb.append(" ").append(entry.getKey()).append("=\"")
.append(escapeAttribute(String.valueOf(entry.getValue()))).append("\"");
}
if (VOID_ELEMENTS.contains(tag) && content == null) {
sb.append("/>");
} else {
sb.append(">");
if (content != null) {
sb.append(content);
}
sb.append("</").append(tag).append(">");
}
return sb.toString();
}

static String guiScaledDimension(Number value) {
return "calc(" + value + "px * var(--gui-scale))";
}
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/guideme/internal/web/LayoutPlaceholders.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package guideme.internal.web;

import guideme.siteexport.web.HTMLFragment;
import java.nio.file.Path;

record LayoutPlaceholders(
Path destinationFolder,
String pageTitle,
String pageContent) {
HTMLFragment pageContent) {
}
18 changes: 8 additions & 10 deletions src/main/java/guideme/internal/web/RecipeRenderers.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
package guideme.internal.web;

import static guideme.internal.web.HtmlUtils.createHtmlElement;

import guideme.siteexport.ExportedRecipe;
import guideme.siteexport.RecipeWebRenderer;
import guideme.siteexport.RecipeWebRenderingContext;
import guideme.siteexport.web.ExportedRecipe;
import guideme.siteexport.web.HTMLNode;
import guideme.siteexport.web.RecipeWebRenderer;
import guideme.siteexport.web.RecipeWebRenderingContext;
import java.util.List;
import java.util.Map;
import java.util.Set;

final class CraftingRecipeRenderer implements RecipeWebRenderer {
Expand Down Expand Up @@ -48,10 +46,10 @@ public void render(RecipeWebRenderingContext builder, ExportedRecipe recipe) {
}

builder.recipeBox(craftingStation, "Smelting", recipe.resultItem())
.rawHtml(createHtmlElement(
"div",
Map.of("class", "smelting-input-box"),
builder.slotHtml(ingredient) + "\n" + createHtmlElement("div", Map.of("class", "fire"))))
.append(HTMLNode.tag("div")
.setClassName("smelting-input-box")
.append(builder.slotHtml(ingredient))
.append(HTMLNode.tag("div").setClassName("fire")))
.arrow()
.slot(recipe.resultItem())
.build();
Expand Down
Loading
Loading