Skip to content

Commit 408bbde

Browse files
committed
implement export settings
1 parent 6e7684b commit 408bbde

File tree

5 files changed

+60
-21
lines changed

5 files changed

+60
-21
lines changed

index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,11 @@
5858
<div class="collapsible-content list">
5959
<div class="simple-widget">
6060
<label>Archive compression level</label>
61-
<input type="range" />
61+
<input type="range" id="setting-archive-compression-level" min="0" max="9" step="1"/>
6262
</div>
6363
<div class="simple-widget">
6464
<label>Export modified files only (developer)</label>
65-
<input type="checkbox" />
65+
<input type="checkbox" id="setting-export-modified-only"/>
6666
</div>
6767
</div>
6868
</div>

src/datapack_changes.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import JSZip from "jszip";
22
import type { Datapack } from "./datapack";
3+
import type { ExportSettings } from "./types/settings";
34

45
interface DatapackChange {
56
datapack: Datapack;
@@ -64,7 +65,7 @@ export class DatapackModifier {
6465
}
6566
}
6667

67-
public async applyChanges(datapacks: ReadonlyArray<Datapack>) {
68+
public async applyChanges(datapacks: ReadonlyArray<Datapack>, export_settings: ExportSettings) {
6869
console.time("Applying changes to packs...");
6970

7071
// Apply changes to files
@@ -80,8 +81,13 @@ export class DatapackModifier {
8081
const pack_id = file_path.split(":")[0];
8182

8283
if (!(pack_id in packs)) {
83-
const dpZip = datapacks.find((dp) => dp.id === pack_id)?.zip;
84-
packs[pack_id] = dpZip!;
84+
if (export_settings.modifiedOnly) {
85+
packs[pack_id] = new JSZip();
86+
}
87+
else {
88+
const dpZip = datapacks.find((dp) => dp.id === pack_id)?.zip;
89+
packs[pack_id] = dpZip!;
90+
}
8591
}
8692

8793
packs[pack_id].file(file_path.split(":")[1], this.changeCache[file_path]);
@@ -92,13 +98,19 @@ export class DatapackModifier {
9298
for (const pack in packs) {
9399
if (Object.prototype.hasOwnProperty.call(packs, pack)) {
94100
const zip = packs[pack];
95-
await this.saveFile(zip);
101+
await this.saveFile(zip, export_settings);
96102
}
97103
}
98104
}
99105

100-
public async saveFile(zip: JSZip) {
101-
await zip.generateAsync({type:"blob"}).then((content) => {
106+
public async saveFile(zip: JSZip, export_settings: ExportSettings) {
107+
await zip.generateAsync({
108+
type: "blob",
109+
compression: export_settings.compressionLevel == 0 ? "STORE" : "DEFLATE",
110+
compressionOptions: {
111+
level: export_settings.compressionLevel
112+
}
113+
}).then((content) => {
102114
var link = document.createElement("a"), url = URL.createObjectURL(content);
103115
link.href = url; link.download = `modified datapack test.zip`;
104116
document.body.appendChild(link);

src/main.ts

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { type Datapack, loadDatapack } from "./datapack";
22
import { DatapackModifierInstance } from "./datapack_changes";
33
import { type DatapackStoreEvents, datapackStore } from "./datapackStore";
4+
import { getExportSettings } from "./page_interactions/settings";
45
import { getStructureSets } from "./structureSet";
56

67
const fileUploadElement = document.getElementById("input")!;
@@ -96,21 +97,10 @@ function sanitizeHtml(unsafe: string): string {
9697
return div.innerHTML;
9798
}
9899

99-
const exportButtonElement = document.getElementById("export-button")!;
100-
exportButtonElement.addEventListener("click", exportButtonClicked, { passive: true });
101-
102-
function exportButtonClicked() {
103-
console.log("Export button clicked");
104-
105-
datapackStore.getAll().forEach((datapack) => {
106-
datapack.instancedConfig?.apply();
107-
});
108-
109-
DatapackModifierInstance.applyChanges(datapackStore.getAll());
110-
}
111-
112100

101+
////////// EXPORT SETTINGS //////////
113102
const collapsibles = document.getElementsByClassName("collapsible-button");
103+
114104
for (const collapsible of collapsibles) {
115105
(collapsible as HTMLButtonElement).addEventListener("click", () => {
116106
collapsible.classList.toggle("toggled");
@@ -121,4 +111,20 @@ for (const collapsible of collapsibles) {
121111
else (content as HTMLDivElement).style.display = "block";
122112
}
123113
});
114+
}
115+
116+
////////// EXPORT BUTTON //////////
117+
const exportButtonElement = document.getElementById("export-button")!;
118+
exportButtonElement.addEventListener("click", exportButtonClicked, { passive: true });
119+
120+
function exportButtonClicked() {
121+
console.log("Export button clicked");
122+
123+
const export_settings = getExportSettings();
124+
125+
datapackStore.getAll().forEach((datapack) => {
126+
datapack.instancedConfig?.apply();
127+
});
128+
129+
DatapackModifierInstance.applyChanges(datapackStore.getAll(), export_settings);
124130
}

src/page_interactions/settings.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import type { CompressionLevel, ExportSettings } from "../types/settings";
2+
3+
export function getExportSettings(): ExportSettings {
4+
let element = document.getElementById("setting-archive-compression-level") as HTMLInputElement;
5+
const archive_compression_level: number = element.valueAsNumber;
6+
if (Number.isNaN(archive_compression_level)) {throw new Error("Archive compression level setting is NaN")};
7+
8+
element = document.getElementById("setting-export-modified-only") as HTMLInputElement;
9+
const export_modified_only: boolean = element.checked;
10+
11+
return {
12+
compressionLevel: archive_compression_level as CompressionLevel,
13+
modifiedOnly: export_modified_only
14+
};
15+
}

src/types/settings.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export type ExportSettings = {
2+
compressionLevel: CompressionLevel;
3+
modifiedOnly: boolean;
4+
}
5+
6+
export type CompressionLevel = 0|1|2|3|4|5|6|7|8|9;

0 commit comments

Comments
 (0)