返回提交历史
Modified
static/webui/script.js
+153
-145
XFEstudio/XFESpaceNinjaServer
feat(webui): display Favorite items first (#2656)
Closes #2653 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2656 Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com> Co-authored-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Co-committed-by: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com>
024b806a
代码差异
1 个文件
+153
-145
@@ -662,166 +662,174 @@ function updateInventory() {
662
662
"KubrowPets"
663
663
].forEach(category => {
664
664
document.getElementById(category + "-list").innerHTML = "";
665
data[category].forEach(item => {
666
const tr = document.createElement("tr");
667
tr.setAttribute("data-item-type", item.ItemType);
668
{
669
const td = document.createElement("td");
670
td.textContent = itemMap[item.ItemType]?.name ?? item.ItemType;
671
if (item.ItemName) {
672
const pipeIndex = item.ItemName.indexOf("|");
673
if (pipeIndex != -1) {
674
td.textContent = item.ItemName.substr(1 + pipeIndex) + " " + td.textContent;
675
} else {
676
td.textContent = item.ItemName + " (" + td.textContent + ")";
665
data[category]
666
.sort((a, b) => (b.Favorite ? 1 : 0) - (a.Favorite ? 1 : 0))
667
.forEach(item => {
668
const tr = document.createElement("tr");
669
tr.setAttribute("data-item-type", item.ItemType);
670
{
671
const td = document.createElement("td");
672
td.textContent = itemMap[item.ItemType]?.name ?? item.ItemType;
673
if (item.ItemName) {
674
const pipeIndex = item.ItemName.indexOf("|");
675
if (pipeIndex != -1) {
676
td.textContent = item.ItemName.substr(1 + pipeIndex) + " " + td.textContent;
677
} else {
678
td.textContent = item.ItemName + " (" + td.textContent + ")";
679
}
677
680
}
681
if (item.Details?.Name) {
682
td.textContent = item.Details.Name + " (" + td.textContent + ")";
683
}
684
if (item.ModularParts && item.ModularParts.length) {
685
td.textContent += " [";
686
item.ModularParts.forEach(part => {
687
td.textContent += " " + (itemMap[part]?.name ?? part) + ",";
688
});
689
td.textContent = td.textContent.slice(0, -1) + " ]";
690
}
691
tr.appendChild(td);
678
692
}
679
if (item.Details?.Name) {
680
td.textContent = item.Details.Name + " (" + td.textContent + ")";
681
}
682
if (item.ModularParts && item.ModularParts.length) {
683
td.textContent += " [";
684
item.ModularParts.forEach(part => {
685
td.textContent += " " + (itemMap[part]?.name ?? part) + ",";
686
});
687
td.textContent = td.textContent.slice(0, -1) + " ]";
688
}
689
tr.appendChild(td);
690
}
691
{
692
const td = document.createElement("td");
693
td.classList = "text-end text-nowrap";
693
{
694
const td = document.createElement("td");
695
td.classList = "text-end text-nowrap";
694
696
695
let maxXP = Math.pow(uniqueLevelCaps[item.ItemType] ?? 30, 2) * 1000;
696
if (
697
category != "Suits" &&
698
category != "SpaceSuits" &&
699
category != "Sentinels" &&
700
category != "Hoverboards" &&
701
category != "MechSuits" &&
702
category != "MoaPets" &&
703
category != "KubrowPets"
704
) {
705
maxXP /= 2;
706
}
707
let anyExaltedMissingXP = false;
708
if (item.XP >= maxXP && item.ItemType in itemMap && "exalted" in itemMap[item.ItemType]) {
709
for (const exaltedType of itemMap[item.ItemType].exalted) {
710
const exaltedItem = data.SpecialItems.find(x => x.ItemType == exaltedType);
711
if (exaltedItem) {
712
const exaltedCap = itemMap[exaltedType]?.type == "weapons" ? 800_000 : 1_600_000;
713
if (exaltedItem.XP < exaltedCap) {
714
anyExaltedMissingXP = true;
715
break;
697
let maxXP = Math.pow(uniqueLevelCaps[item.ItemType] ?? 30, 2) * 1000;
698
if (
699
category != "Suits" &&
700
category != "SpaceSuits" &&
701
category != "Sentinels" &&
702
category != "Hoverboards" &&
703
category != "MechSuits" &&
704
category != "MoaPets" &&
705
category != "KubrowPets"
706
) {
707
maxXP /= 2;
708
}
709
let anyExaltedMissingXP = false;
710
if (item.XP >= maxXP && item.ItemType in itemMap && "exalted" in itemMap[item.ItemType]) {
711
for (const exaltedType of itemMap[item.ItemType].exalted) {
712
const exaltedItem = data.SpecialItems.find(x => x.ItemType == exaltedType);
713
if (exaltedItem) {
714
const exaltedCap =
715
itemMap[exaltedType]?.type == "weapons" ? 800_000 : 1_600_000;
716
if (exaltedItem.XP < exaltedCap) {
717
anyExaltedMissingXP = true;
718
break;
719
}
716
720
}
717
721
}
718
722
}
719
}
720
if (item.XP < maxXP || anyExaltedMissingXP) {
721
const a = document.createElement("a");
722
a.href = "#";
723
a.onclick = function (event) {
724
event.preventDefault();
725
revalidateAuthz().then(() => {
726
const promises = [];
727
if (item.XP < maxXP) {
728
promises.push(addGearExp(category, item.ItemId.$oid, maxXP - item.XP));
729
}
730
if ("exalted" in itemMap[item.ItemType]) {
731
for (const exaltedType of itemMap[item.ItemType].exalted) {
732
const exaltedItem = data.SpecialItems.find(x => x.ItemType == exaltedType);
733
if (exaltedItem) {
734
const exaltedCap =
735
itemMap[exaltedType]?.type == "weapons" ? 800_000 : 1_600_000;
736
if (exaltedItem.XP < exaltedCap) {
737
promises.push(
738
addGearExp(
739
"SpecialItems",
740
exaltedItem.ItemId.$oid,
741
exaltedCap - exaltedItem.XP
742
)
743
);
723
if (item.XP < maxXP || anyExaltedMissingXP) {
724
const a = document.createElement("a");
725
a.href = "#";
726
a.onclick = function (event) {
727
event.preventDefault();
728
revalidateAuthz().then(() => {
729
const promises = [];
730
if (item.XP < maxXP) {
731
promises.push(addGearExp(category, item.ItemId.$oid, maxXP - item.XP));
732
}
733
if ("exalted" in itemMap[item.ItemType]) {
734
for (const exaltedType of itemMap[item.ItemType].exalted) {
735
const exaltedItem = data.SpecialItems.find(
736
x => x.ItemType == exaltedType
737
);
738
if (exaltedItem) {
739
const exaltedCap =
740
itemMap[exaltedType]?.type == "weapons" ? 800_000 : 1_600_000;
741
if (exaltedItem.XP < exaltedCap) {
742
promises.push(
743
addGearExp(
744
"SpecialItems",
745
exaltedItem.ItemId.$oid,
746
exaltedCap - exaltedItem.XP
747
)
748
);
749
}
744
750
}
745
751
}
746
752
}
747
}
748
Promise.all(promises).then(() => {
749
updateInventory();
753
Promise.all(promises).then(() => {
754
updateInventory();
755
});
750
756
});
751
});
752
};
753
a.title = loc("code_maxRank");
754
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2V448c0 17.7 14.3 32 32 32s32-14.3 32-32V141.2L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z"/></svg>`;
755
td.appendChild(a);
756
}
757
};
758
a.title = loc("code_maxRank");
759
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2V448c0 17.7 14.3 32 32 32s32-14.3 32-32V141.2L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z"/></svg>`;
760
td.appendChild(a);
761
}
757
762
758
if (
759
["Suits", "LongGuns", "Pistols", "Melee", "SpaceGuns", "SpaceMelee"].includes(category) ||
760
modularWeapons.includes(item.ItemType)
761
) {
762
const a = document.createElement("a");
763
a.href = "/webui/detailedView?productCategory=" + category + "&itemId=" + item.ItemId.$oid;
764
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M278.5 215.6L23 471c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l57-57h68c49.7 0 97.9-14.4 139-41c11.1-7.2 5.5-23-7.8-23c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l81-24.3c2.5-.8 4.8-2.1 6.7-4l22.4-22.4c10.1-10.1 2.9-27.3-11.3-27.3l-32.2 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l112-33.6c4-1.2 7.4-3.9 9.3-7.7C506.4 207.6 512 184.1 512 160c0-41-16.3-80.3-45.3-109.3l-5.5-5.5C432.3 16.3 393 0 352 0s-80.3 16.3-109.3 45.3L139 149C91 197 64 262.1 64 330v55.3L253.6 195.8c6.2-6.2 16.4-6.2 22.6 0c5.4 5.4 6.1 13.6 2.2 19.8z"/></svg>`;
765
td.appendChild(a);
766
}
763
if (
764
["Suits", "LongGuns", "Pistols", "Melee", "SpaceGuns", "SpaceMelee"].includes(
765
category
766
) ||
767
modularWeapons.includes(item.ItemType)
768
) {
769
const a = document.createElement("a");
770
a.href =
771
"/webui/detailedView?productCategory=" + category + "&itemId=" + item.ItemId.$oid;
772
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M278.5 215.6L23 471c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l57-57h68c49.7 0 97.9-14.4 139-41c11.1-7.2 5.5-23-7.8-23c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l81-24.3c2.5-.8 4.8-2.1 6.7-4l22.4-22.4c10.1-10.1 2.9-27.3-11.3-27.3l-32.2 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l112-33.6c4-1.2 7.4-3.9 9.3-7.7C506.4 207.6 512 184.1 512 160c0-41-16.3-80.3-45.3-109.3l-5.5-5.5C432.3 16.3 393 0 352 0s-80.3 16.3-109.3 45.3L139 149C91 197 64 262.1 64 330v55.3L253.6 195.8c6.2-6.2 16.4-6.2 22.6 0c5.4 5.4 6.1 13.6 2.2 19.8z"/></svg>`;
773
td.appendChild(a);
774
}
767
775
768
if (!(item.Features & 8) && modularWeapons.includes(item.ItemType)) {
769
const a = document.createElement("a");
770
a.href = "#";
771
a.onclick = function (event) {
772
event.preventDefault();
773
gildEquipment(category, item.ItemId.$oid);
774
};
775
a.title = loc("code_gild");
776
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z"/></svg>`;
777
td.appendChild(a);
778
}
779
if (category == "KubrowPets") {
780
const a = document.createElement("a");
781
a.href = "#";
782
a.onclick = function (event) {
783
event.preventDefault();
784
maturePet(item.ItemId.$oid, !item.Details.IsPuppy);
785
};
786
if (item.Details.IsPuppy) {
787
a.title = loc("code_mature");
788
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0z"/></svg>`;
789
} else {
790
a.title = loc("code_unmature");
791
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M256 64A64 64 0 1 0 128 64a64 64 0 1 0 128 0zM152.9 169.3c-23.7-8.4-44.5-24.3-58.8-45.8L74.6 94.2C64.8 79.5 45 75.6 30.2 85.4s-18.7 29.7-8.9 44.4L40.9 159c18.1 27.1 42.8 48.4 71.1 62.4L112 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 32 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-258.4c29.1-14.2 54.4-36.2 72.7-64.2l18.2-27.9c9.6-14.8 5.4-34.6-9.4-44.3s-34.6-5.5-44.3 9.4L291 122.4c-21.8 33.4-58.9 53.6-98.8 53.6c-12.6 0-24.9-2-36.6-5.8c-.9-.3-1.8-.7-2.7-.9z"/></svg>`;
776
if (!(item.Features & 8) && modularWeapons.includes(item.ItemType)) {
777
const a = document.createElement("a");
778
a.href = "#";
779
a.onclick = function (event) {
780
event.preventDefault();
781
gildEquipment(category, item.ItemId.$oid);
782
};
783
a.title = loc("code_gild");
784
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z"/></svg>`;
785
td.appendChild(a);
792
786
}
793
td.appendChild(a);
794
}
795
{
796
const a = document.createElement("a");
797
a.href = "#";
798
a.onclick = function (event) {
799
event.preventDefault();
800
const name = prompt(loc("code_renamePrompt"));
801
if (name !== null) {
802
renameGear(category, item.ItemId.$oid, name);
787
if (category == "KubrowPets") {
788
const a = document.createElement("a");
789
a.href = "#";
790
a.onclick = function (event) {
791
event.preventDefault();
792
maturePet(item.ItemId.$oid, !item.Details.IsPuppy);
793
};
794
if (item.Details.IsPuppy) {
795
a.title = loc("code_mature");
796
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304l0 128c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-223.1L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6l29.7 0c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L232 256.9 232 480c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-128-16 0z"/></svg>`;
797
} else {
798
a.title = loc("code_unmature");
799
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M256 64A64 64 0 1 0 128 64a64 64 0 1 0 128 0zM152.9 169.3c-23.7-8.4-44.5-24.3-58.8-45.8L74.6 94.2C64.8 79.5 45 75.6 30.2 85.4s-18.7 29.7-8.9 44.4L40.9 159c18.1 27.1 42.8 48.4 71.1 62.4L112 480c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96 32 0 0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-258.4c29.1-14.2 54.4-36.2 72.7-64.2l18.2-27.9c9.6-14.8 5.4-34.6-9.4-44.3s-34.6-5.5-44.3 9.4L291 122.4c-21.8 33.4-58.9 53.6-98.8 53.6c-12.6 0-24.9-2-36.6-5.8c-.9-.3-1.8-.7-2.7-.9z"/></svg>`;
803
800
}
804
};
805
a.title = loc("code_rename");
806
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M0 80V229.5c0 17 6.7 33.3 18.7 45.3l176 176c25 25 65.5 25 90.5 0L418.7 317.3c25-25 25-65.5 0-90.5l-176-176c-12-12-28.3-18.7-45.3-18.7H48C21.5 32 0 53.5 0 80zm112 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"/></svg>`;
807
td.appendChild(a);
808
}
809
{
810
const a = document.createElement("a");
811
a.href = "#";
812
a.onclick = function (event) {
813
event.preventDefault();
814
document.getElementById(category + "-list").removeChild(tr);
815
disposeOfGear(category, item.ItemId.$oid);
816
};
817
a.title = loc("code_remove");
818
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
819
td.appendChild(a);
801
td.appendChild(a);
802
}
803
{
804
const a = document.createElement("a");
805
a.href = "#";
806
a.onclick = function (event) {
807
event.preventDefault();
808
const name = prompt(loc("code_renamePrompt"));
809
if (name !== null) {
810
renameGear(category, item.ItemId.$oid, name);
811
}
812
};
813
a.title = loc("code_rename");
814
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M0 80V229.5c0 17 6.7 33.3 18.7 45.3l176 176c25 25 65.5 25 90.5 0L418.7 317.3c25-25 25-65.5 0-90.5l-176-176c-12-12-28.3-18.7-45.3-18.7H48C21.5 32 0 53.5 0 80zm112 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"/></svg>`;
815
td.appendChild(a);
816
}
817
{
818
const a = document.createElement("a");
819
a.href = "#";
820
a.onclick = function (event) {
821
event.preventDefault();
822
document.getElementById(category + "-list").removeChild(tr);
823
disposeOfGear(category, item.ItemId.$oid);
824
};
825
a.title = loc("code_remove");
826
a.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"/></svg>`;
827
td.appendChild(a);
828
}
829
tr.appendChild(td);
820
830
}
821
tr.appendChild(td);
822
}
823
document.getElementById(category + "-list").appendChild(tr);
824
});
831
document.getElementById(category + "-list").appendChild(tr);
832
});
825
833
});
826
834
827
835
document.getElementById("EvolutionProgress-list").innerHTML = "";