Added more Admin QOL stuff. DW.

This commit is contained in:
sarah committed 2026-09-05 14:04:21 +02:00
1 parent ab0d858fef
commit 24842c65fb
12 files changed
+4236

No files matched your search

+53
View File
@@ -54,8 +54,61 @@ $PageSection = "Admin";
Build mutation recipes with a visual grid.
</span>
</a>
<a
class="ActionButton AdminEditorLink"
href="/Pages/AdminMassPlants.html"
>
<strong>Mass plant editor</strong>
<span>
Apply selected plant fields to several plants at once.
</span>
</a>
<a
class="ActionButton AdminEditorLink"
href="/Pages/AdminMassMutations.html"
>
<strong>Mass mutation editor</strong>
<span>
Apply selected mutation fields to several mutations at once.
</span>
</a>
</div>
<section
id="AdminOverview"
class="Panel AdminOverview"
hidden
>
<div class="PanelHeader">
<h2>Quick overview</h2>
</div>
<p
id="AdminOverviewMessage"
class="PageMessage"
aria-live="polite"
></p>
<div class="AdminOverviewGroups">
<section>
<h2>Plants</h2>
<div id="AdminOverviewMissingSprites"></div>
<div id="AdminOverviewNoObtain"></div>
</section>
<section>
<h2>Mutations</h2>
<div id="AdminOverviewNoDescription"></div>
<div id="AdminOverviewNoHint"></div>
</section>
</div>
</section>
</div>
</main>
<script src="/Scripts/Garden/PlantImages.js"></script>
<script src="/Scripts/Garden/AdminOverview.js"></script>
</body>
</html>
+269
View File
@@ -0,0 +1,269 @@
<?php
$PageTitle = "Admin mass mutations";
$PageSection = "Admin";
?>
<!DOCTYPE html>
<html lang="en" data-palette="CatppuccinMocha">
<?php require __DIR__ . "/Bits/Head.php"; ?>
<body>
<?php require __DIR__ . "/Bits/Navbar.php"; ?>
<main class="MainContainer AdminMutationMain">
<h1>Mass mutation editor</h1>
<p>
Mark the mutations you want to edit, enable the fields to
change, then save. Fields left disabled stay untouched.
</p>
<p
id="AdminAccessMessage"
class="PageMessage"
aria-live="polite"
>
Checking admin access...
</p>
<div id="AdminContent" hidden>
<section class="Panel AdminMassSelectionPanel">
<div class="PanelHeader">
<h2>Mutations</h2>
</div>
<div class="AdminMassSelectionBody">
<div
id="AdminMassMutationSelection"
class="AdminPlantChecklist AdminMassChecklist"
></div>
<div class="AdminEditorActions">
<button
id="AdminMassMutationSelectAll"
class="ActionButton AdminInlineButton"
type="button"
>
Select all
</button>
<button
id="AdminMassMutationClear"
class="ActionButton AdminInlineButton"
type="button"
>
Clear selection
</button>
</div>
</div>
</section>
<form
id="AdminMassMutationForm"
class="Panel AdminEditorForm AdminMassEditorForm"
>
<div class="PanelHeader PanelHeaderInset">
<h2>Fields</h2>
</div>
<div class="AdminEditorGrid">
<div class="AdminMassField AdminEditorWideField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="Name">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Name</span>
<input id="AdminMassMutationName" type="text" maxlength="128">
</label>
</div>
<div class="AdminMassField AdminEditorWideField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="Description">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Description</span>
<textarea id="AdminMassMutationDescription" rows="4"></textarea>
</label>
</div>
<div class="AdminMassField AdminEditorWideField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="Hint">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Hint</span>
<textarea id="AdminMassMutationHint" rows="3"></textarea>
</label>
</div>
<div class="AdminMassField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="Priority">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Priority</span>
<input id="AdminMassMutationPriority" type="number" step="1" value="0">
</label>
</div>
<div class="AdminMassField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="Chance">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Chance (%)</span>
<input id="AdminMassMutationChance" type="number" min="0" max="100" step="0.01" value="100">
</label>
</div>
<div class="AdminMassField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="Cooldown">
<span>Apply</span>
</label>
<div class="AdminEditorField">
<span>Cooldown</span>
<div class="AdminDurationInputs">
<label>
<span>Hours</span>
<input id="AdminMassMutationCooldownHours" type="number" min="0" step="1" value="0">
</label>
<label>
<span>Minutes</span>
<input id="AdminMassMutationCooldownMinutes" type="number" min="0" max="59" step="1" value="0">
</label>
<label>
<span>Seconds</span>
<input id="AdminMassMutationCooldownSeconds" type="number" min="0" max="59" step="1" value="0">
</label>
</div>
</div>
</div>
<div class="AdminMassField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="Rotation">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Rotation</span>
<select id="AdminMassMutationRotation">
<option value="None">None</option>
<option value="Any">Any</option>
</select>
</label>
</div>
<div class="AdminMassField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="AllowImmature">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Allow immature plants</span>
<select id="AdminMassMutationAllowImmature">
<option value="true">Yes</option>
<option value="false">No</option>
</select>
</label>
</div>
<div class="AdminMassField AdminEditorWideField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="Pattern">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Pattern JSON</span>
<textarea id="AdminMassMutationPattern" rows="7" spellcheck="false">[["Any"]]</textarea>
</label>
</div>
<div class="AdminMassField AdminEditorWideField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="Success">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Success result JSON</span>
<textarea id="AdminMassMutationSuccess" rows="7" spellcheck="false">[["Keep"]]</textarea>
</label>
</div>
<div class="AdminMassField AdminEditorWideField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="Failure">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Failure result JSON</span>
<textarea id="AdminMassMutationFailure" rows="7" spellcheck="false">"Keep"</textarea>
<small>Use "Keep", "Clear", or a result matrix.</small>
</label>
</div>
<div class="AdminMassField AdminEditorWideField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="PlantsUsed">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Plants used</span>
<input id="AdminMassMutationPlantsUsed" type="text" placeholder="RedRose, BlueRose">
<small>Comma-separated Plant Keys.</small>
</label>
</div>
<div class="AdminMassField AdminEditorWideField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="PlantsCreated">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Plants created</span>
<input id="AdminMassMutationPlantsCreated" type="text" placeholder="PurpleRose">
<small>Comma-separated Plant Keys.</small>
</label>
</div>
</div>
<div class="AdminEditorActions">
<button
id="AdminMassMutationSaveButton"
class="ActionButton AdminSaveButton"
type="submit"
>
Save marked mutations
</button>
<a
class="ActionButton AdminInlineButton AdminEditorBackLink"
href="/Pages/Admin.html"
>
Back to Admin
</a>
</div>
</form>
<p
id="AdminMassMutationMessage"
class="PageMessage"
aria-live="polite"
></p>
</div>
</main>
<script src="/Scripts/Garden/Save.js"></script>
<script src="/Scripts/Garden/AdminValidation.js"></script>
<script src="/Scripts/Garden/AdminMassMutationEditor.js"></script>
</body>
</html>
+218
View File
@@ -0,0 +1,218 @@
<?php
$PageTitle = "Admin mass plants";
$PageSection = "Admin";
?>
<!DOCTYPE html>
<html lang="en" data-palette="CatppuccinMocha">
<?php require __DIR__ . "/Bits/Head.php"; ?>
<body>
<?php require __DIR__ . "/Bits/Navbar.php"; ?>
<main class="MainContainer">
<h1>Mass plant editor</h1>
<p>
Mark the plants you want to edit, enable the fields to
change, then save. Fields left disabled stay untouched.
</p>
<p
id="AdminAccessMessage"
class="PageMessage"
aria-live="polite"
>
Checking admin access...
</p>
<div id="AdminContent" hidden>
<section class="Panel AdminMassSelectionPanel">
<div class="PanelHeader">
<h2>Plants</h2>
</div>
<div class="AdminMassSelectionBody">
<div
id="AdminMassPlantSelection"
class="AdminPlantChecklist AdminMassChecklist"
></div>
<div class="AdminEditorActions">
<button
id="AdminMassPlantSelectAll"
class="ActionButton AdminInlineButton"
type="button"
>
Select all
</button>
<button
id="AdminMassPlantClear"
class="ActionButton AdminInlineButton"
type="button"
>
Clear selection
</button>
</div>
</div>
</section>
<form
id="AdminMassPlantForm"
class="Panel AdminEditorForm AdminMassEditorForm"
>
<div class="PanelHeader PanelHeaderInset">
<h2>Fields</h2>
</div>
<div class="AdminEditorGrid">
<div class="AdminMassField AdminEditorWideField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="Name">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Name</span>
<input id="AdminMassPlantName" type="text" maxlength="64">
</label>
</div>
<div class="AdminMassField AdminEditorWideField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="Description">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Description</span>
<textarea id="AdminMassPlantDescription" rows="4"></textarea>
</label>
</div>
<div class="AdminMassField AdminEditorWideField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="Tags">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Tags</span>
<input id="AdminMassPlantTags" type="text" placeholder="Rose, Flower, Red">
<small>Comma-separated.</small>
</label>
</div>
<div class="AdminMassField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="GrowthTime">
<span>Apply</span>
</label>
<div class="AdminEditorField">
<span>Growth time</span>
<div class="AdminDurationInputs">
<label>
<span>Hours</span>
<input id="AdminMassPlantGrowthHours" type="number" min="0" step="1" value="1">
</label>
<label>
<span>Minutes</span>
<input id="AdminMassPlantGrowthMinutes" type="number" min="0" max="59" step="1" value="0">
</label>
<label>
<span>Seconds</span>
<input id="AdminMassPlantGrowthSeconds" type="number" min="0" max="59" step="1" value="0">
</label>
</div>
</div>
</div>
<div class="AdminMassField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="HarvestMultiplier">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Harvest multiplier</span>
<input id="AdminMassPlantHarvestMultiplier" type="number" min="0" max="9999.9999" step="0.0001" value="1.5">
</label>
</div>
<div class="AdminMassField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="ShopPlant">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Shop plant</span>
<select id="AdminMassPlantShopPlant">
<option value="true">Yes</option>
<option value="false">No</option>
</select>
</label>
</div>
<div class="AdminMassField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="BaseCost">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Base seed cost</span>
<input id="AdminMassPlantBaseCost" type="number" min="0" step="1" value="0">
</label>
</div>
<div class="AdminMassField AdminEditorWideField">
<label class="AdminEditorCheckField AdminMassApplyField">
<input type="checkbox" data-admin-mass-apply="Effects">
<span>Apply</span>
</label>
<label class="AdminEditorField">
<span>Effects JSON</span>
<textarea id="AdminMassPlantEffects" rows="8" spellcheck="false">{}</textarea>
</label>
</div>
</div>
<div class="AdminEditorActions">
<button
id="AdminMassPlantSaveButton"
class="ActionButton AdminSaveButton"
type="submit"
>
Save marked plants
</button>
<a
class="ActionButton AdminInlineButton AdminEditorBackLink"
href="/Pages/Admin.html"
>
Back to Admin
</a>
</div>
</form>
<p
id="AdminMassPlantMessage"
class="PageMessage"
aria-live="polite"
></p>
</div>
</main>
<script src="/Scripts/Garden/Save.js"></script>
<script src="/Scripts/Garden/AdminValidation.js"></script>
<script src="/Scripts/Garden/AdminMassPlantEditor.js"></script>
</body>
</html>
+26
View File
@@ -64,6 +64,31 @@ $PageSection = "Admin";
</button>
</div>
<div class="AdminEditorActions AdminEditorTransferActions">
<button
id="AdminMutationImportButton"
class="ActionButton AdminInlineButton"
type="button"
>
Import JSON
</button>
<input
id="AdminMutationImportFile"
type="file"
accept="application/json,.json"
hidden
>
<button
id="AdminMutationExportButton"
class="ActionButton AdminInlineButton"
type="button"
>
Export JSON
</button>
</div>
<form
id="AdminMutationForm"
class="Panel AdminEditorForm"
@@ -489,6 +514,7 @@ $PageSection = "Admin";
<script src="/Scripts/Garden/Plants.js"></script>
<script src="/Scripts/Garden/Mutations.js"></script>
<script src="/Scripts/Garden/Save.js"></script>
<script src="/Scripts/Garden/AdminValidation.js"></script>
<script src="/Scripts/Garden/AdminMutationEditor.js"></script>
</body>
</html>
+26
View File
@@ -64,6 +64,31 @@ $PageSection = "Admin";
</button>
</div>
<div class="AdminEditorActions AdminEditorTransferActions">
<button
id="AdminPlantImportButton"
class="ActionButton AdminInlineButton"
type="button"
>
Import JSON
</button>
<input
id="AdminPlantImportFile"
type="file"
accept="application/json,.json"
hidden
>
<button
id="AdminPlantExportButton"
class="ActionButton AdminInlineButton"
type="button"
>
Export JSON
</button>
</div>
<form
id="AdminPlantForm"
class="Panel AdminEditorForm"
@@ -360,6 +385,7 @@ $PageSection = "Admin";
<script src="/Scripts/Garden/Mutations.js"></script>
<script src="/Scripts/Garden/Save.js"></script>
<script src="/Scripts/Garden/Economy.js"></script>
<script src="/Scripts/Garden/AdminValidation.js"></script>
<script src="/Scripts/Garden/AdminPlantEditor.js"></script>
</body>
</html>