Skip to content

Commit 9102f01

Browse files
committed
Asset Size
1 parent 8451773 commit 9102f01

File tree

4 files changed

+75
-2
lines changed

4 files changed

+75
-2
lines changed

features/asset-size/data.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"title": "Asset Size",
3+
"description": "Allows you to hover over any asset (costumes and sounds) in the editor to view the file size.",
4+
"credits": [
5+
{
6+
"url": "https://scratch.mit.edu/users/rgantzos/",
7+
"username": "rgantzos"
8+
}
9+
],
10+
"type": ["Editor"],
11+
"scripts": [{ "file": "script.js", "runOn": "/projects/*" }]
12+
}
13+

features/asset-size/script.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
export default async function ({ feature, console }) {
2+
ScratchTools.waitForElements(
3+
"div[class*='asset-panel_wrapper_'] div[class*='selector_list-area_'] > div",
4+
function (asset) {
5+
if (asset.dataset.ste === "ste-file-size") return;
6+
asset.dataset.ste = "ste-file-size";
7+
8+
let content = asset.querySelector(
9+
"div[class*='sprite-selector-item_sprite-info_-'] div[class*='sprite-selector-item_sprite-details_']"
10+
);
11+
12+
asset.firstChild.addEventListener("mouseover", function () {
13+
let scratchAsset = ScratchTools.Scratch.vm.editingTarget;
14+
let targetAssets =
15+
feature.traps.gui().editorTab?.activeTabIndex === 1
16+
? scratchAsset.getCostumes()
17+
: scratchAsset.getSounds();
18+
let data = targetAssets[getElementIndex(asset)].asset.data.byteLength;
19+
20+
content.dataset.previousContent = content.textContent;
21+
content.textContent = formatBytes(data);
22+
});
23+
24+
asset.firstChild.addEventListener("mouseout", function () {
25+
if (content.dataset.previousContent) {
26+
content.textContent = content.dataset.previousContent;
27+
}
28+
});
29+
}
30+
);
31+
32+
function getElementIndex(element) {
33+
const parent = element.parentElement;
34+
35+
const children = parent.children;
36+
37+
for (let i = 0; i < children.length; i++) {
38+
if (children[i] === element) {
39+
return i;
40+
}
41+
}
42+
43+
return -1;
44+
}
45+
46+
function formatBytes(bytes, decimals = 2) {
47+
if (bytes === 0) return "0 Bytes";
48+
49+
const k = 1024;
50+
const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
51+
const i = Math.floor(Math.log(bytes) / Math.log(k));
52+
53+
const sizeInUnits = parseFloat((bytes / Math.pow(k, i)).toFixed(decimals));
54+
55+
return `${sizeInUnits} ${sizes[i]}`;
56+
}
57+
}

features/features.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
[
2+
{
3+
"version": 2,
4+
"id": "asset-size",
5+
"versionAdded": "v4.0.0"
6+
},
27
{
38
"version": 2,
49
"id": "disable-cloud",

features/remaining-replies/script.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
export default async function ({ feature, console }) {
2-
window.feature = feature
3-
42
ScratchTools.waitForElements(".flex-row.comment", function (comment) {
53
let data = feature.redux
64
.getState()

0 commit comments

Comments
 (0)