Skip to content

Commit c74f9b2

Browse files
committed
Merge branch 'delete-folder-contents' of https://github.com/valmontechno/ScratchAddons into delete-folder-contents
2 parents 5c91007 + e6cf3ad commit c74f9b2

1 file changed

Lines changed: 55 additions & 42 deletions

File tree

addons/folders/userscript.js

Lines changed: 55 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -770,25 +770,30 @@ export default async function ({ addon, console, msg }) {
770770

771771
function getRestoreFun(type, lastCostumeDeleted) {
772772
// Reintegrate the only and last costume to the folder
773-
if (lastCostumeDeleted !== null) { // type === "costume"
774-
const index = lastCostumeDeleted.target.sprite.costumes.findIndex(costume => costume.assetId === lastCostumeDeleted.assetId);
773+
if (lastCostumeDeleted !== null) {
774+
// type === "costume"
775+
const index = lastCostumeDeleted.target.sprite.costumes.findIndex(
776+
(costume) => costume.assetId === lastCostumeDeleted.assetId
777+
);
775778
vm.renameCostume(index, lastCostumeDeleted.name);
776779
lastCostumeDeleted = null;
777780
}
778781

779782
// Close all folders to prevent sprites from being renamed
780783
if (type === "sprite") {
781-
const element = document.querySelector("[class*='sprite-selector_sprite-wrapper'] [class*='sprite-selector-item_sprite-selector-item']");
784+
const element = document.querySelector(
785+
"[class*='sprite-selector_sprite-wrapper'] [class*='sprite-selector-item_sprite-selector-item']"
786+
);
782787
if (element) {
783788
const component = getSpriteSelectorItemFromElement(element);
784-
vm.runtime.targets.forEach(target => {
789+
vm.runtime.targets.forEach((target) => {
785790
setFolderOpen(component, getFolderFromName(target.sprite.name), false);
786791
});
787792
}
788793
}
789794

790795
restorationFunctions.reverse();
791-
restorationFunctions.forEach(restore => restore());
796+
restorationFunctions.forEach((restore) => restore());
792797
restorationFunctions = [];
793798
}
794799

@@ -864,12 +869,16 @@ export default async function ({ addon, console, msg }) {
864869
const deleteFolderContents = async () => {
865870
const type = component.props.dragType.toLowerCase();
866871
if (
867-
await addon.tab.confirm(msg("delete-folder-contents-prompt-title"), msg(`delete-${type}s-folder-contents-prompt`), {
868-
useEditorClasses: true,
869-
})
872+
await addon.tab.confirm(
873+
msg("delete-folder-contents-prompt-title"),
874+
msg(`delete-${type}s-folder-contents-prompt`),
875+
{
876+
useEditorClasses: true,
877+
}
878+
)
870879
) {
871880
if (type === "sprite") {
872-
const targets = vm.runtime.targets;
881+
const targets = vm.runtime.targets;
873882
restorationFunctions = [];
874883

875884
for (let i = targets.length - 1; i > -1; i--) {
@@ -893,8 +902,7 @@ export default async function ({ addon, console, msg }) {
893902
restoreButtonMsg = "restore-sprites";
894903
}
895904
});
896-
}
897-
else if (type === "costume" || type === "sound") {
905+
} else if (type === "costume" || type === "sound") {
898906
restorationFunctions = [];
899907
const assets = type === "costume" ? vm.editingTarget.sprite.costumes : vm.editingTarget.sprite.sounds;
900908

@@ -940,23 +948,23 @@ export default async function ({ addon, console, msg }) {
940948
label: msg("rename-folder"),
941949
callback: renameFolder,
942950
position: "assetContextMenuAfterDelete",
943-
order: 10
951+
order: 10,
944952
},
945953
{
946954
className: "sa-folders-remove-folder",
947955
label: msg("remove-folder"),
948956
callback: removeFolder,
949957
position: "assetContextMenuAfterDelete",
950-
order: 11
958+
order: 11,
951959
},
952960
{
953961
className: "sa-folders-delete-folder-contents",
954962
label: msg("delete-folder-contents"),
955963
callback: deleteFolderContents,
956964
position: "assetContextMenuAfterDelete",
957965
order: 12,
958-
dangerous: true
959-
}
966+
dangerous: true,
967+
},
960968
];
961969
} else {
962970
ctx.target.setAttribute("sa-folders-context-type", "asset");
@@ -1479,37 +1487,42 @@ export default async function ({ addon, console, msg }) {
14791487

14801488
// Sprite list
14811489
{
1482-
addon.tab.waitForElement("[class^='sprite-selector_sprite-wrapper']", {
1483-
reduxCondition: (state) => !state.scratchGui.mode.isPlayerOnly,
1484-
}).then(spriteSelectorItemElement => {
1485-
vm = addon.tab.traps.vm;
1486-
reactInternalKey = addon.tab.traps.getInternalKey(spriteSelectorItemElement);
1487-
const sortableHOCInstance = getSortableHOCFromElement(spriteSelectorItemElement);
1488-
let reactInternalInstance = spriteSelectorItemElement[reactInternalKey];
1489-
while (!isSpriteSelectorItem(reactInternalInstance.stateNode)) {
1490-
reactInternalInstance = reactInternalInstance.child;
1491-
}
1492-
const spriteSelectorItemInstance = reactInternalInstance.stateNode;
1493-
verifySortableHOC(sortableHOCInstance);
1494-
verifySpriteSelectorItem(spriteSelectorItemInstance);
1495-
verifyVM(vm);
1496-
patchSortableHOC(sortableHOCInstance.constructor, TYPE_SPRITES);
1497-
patchSpriteSelectorItem(spriteSelectorItemInstance.constructor);
1498-
sortableHOCInstance.saInitialSetup();
1499-
patchVM();
1500-
});
1490+
addon.tab
1491+
.waitForElement("[class^='sprite-selector_sprite-wrapper']", {
1492+
reduxCondition: (state) => !state.scratchGui.mode.isPlayerOnly,
1493+
})
1494+
.then((spriteSelectorItemElement) => {
1495+
vm = addon.tab.traps.vm;
1496+
reactInternalKey = addon.tab.traps.getInternalKey(spriteSelectorItemElement);
1497+
const sortableHOCInstance = getSortableHOCFromElement(spriteSelectorItemElement);
1498+
let reactInternalInstance = spriteSelectorItemElement[reactInternalKey];
1499+
while (!isSpriteSelectorItem(reactInternalInstance.stateNode)) {
1500+
reactInternalInstance = reactInternalInstance.child;
1501+
}
1502+
const spriteSelectorItemInstance = reactInternalInstance.stateNode;
1503+
verifySortableHOC(sortableHOCInstance);
1504+
verifySpriteSelectorItem(spriteSelectorItemInstance);
1505+
verifyVM(vm);
1506+
patchSortableHOC(sortableHOCInstance.constructor, TYPE_SPRITES);
1507+
patchSpriteSelectorItem(spriteSelectorItemInstance.constructor);
1508+
sortableHOCInstance.saInitialSetup();
1509+
patchVM();
1510+
});
15011511
}
15021512

15031513
// Costume and sound list
15041514
{
1505-
addon.tab.waitForElement("[class*='selector_list-item']", {
1506-
reduxCondition: (state) => state.scratchGui.editorTab.activeTabIndex !== 0 && !state.scratchGui.mode.isPlayerOnly,
1507-
}).then(selectorListItem => {
1508-
const sortableHOCInstance = getSortableHOCFromElement(selectorListItem);
1509-
verifySortableHOC(sortableHOCInstance);
1510-
patchSortableHOC(sortableHOCInstance.constructor, TYPE_ASSETS);
1511-
sortableHOCInstance.saInitialSetup();
1512-
});
1515+
addon.tab
1516+
.waitForElement("[class*='selector_list-item']", {
1517+
reduxCondition: (state) =>
1518+
state.scratchGui.editorTab.activeTabIndex !== 0 && !state.scratchGui.mode.isPlayerOnly,
1519+
})
1520+
.then((selectorListItem) => {
1521+
const sortableHOCInstance = getSortableHOCFromElement(selectorListItem);
1522+
verifySortableHOC(sortableHOCInstance);
1523+
patchSortableHOC(sortableHOCInstance.constructor, TYPE_ASSETS);
1524+
sortableHOCInstance.saInitialSetup();
1525+
});
15131526
}
15141527

15151528
// Update restore button

0 commit comments

Comments
 (0)