Skip to content

Commit c8a7d08

Browse files
authored
Merge pull request #948 from rgantzos/main
Asset Size
2 parents 103c83d + 616bffd commit c8a7d08

File tree

4 files changed

+78
-2
lines changed

4 files changed

+78
-2
lines changed

features/asset-size/data.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
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+
"dynamic": true,
12+
"scripts": [{ "file": "script.js", "runOn": "/projects/*" }]
13+
}
14+

features/asset-size/script.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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+
if (!feature.self.enabled) return;
14+
15+
let scratchAsset = ScratchTools.Scratch.vm.editingTarget;
16+
let targetAssets =
17+
feature.traps.gui().editorTab?.activeTabIndex === 1
18+
? scratchAsset.getCostumes()
19+
: scratchAsset.getSounds();
20+
let data = targetAssets[getElementIndex(asset)].asset.data.byteLength;
21+
22+
content.dataset.previousContent = content.textContent;
23+
content.textContent = formatBytes(data);
24+
});
25+
26+
asset.firstChild.addEventListener("mouseout", function () {
27+
if (content.dataset.previousContent) {
28+
content.textContent = content.dataset.previousContent;
29+
}
30+
});
31+
}
32+
);
33+
34+
function getElementIndex(element) {
35+
const parent = element.parentElement;
36+
37+
const children = parent.children;
38+
39+
for (let i = 0; i < children.length; i++) {
40+
if (children[i] === element) {
41+
return i;
42+
}
43+
}
44+
45+
return -1;
46+
}
47+
48+
function formatBytes(bytes, decimals = 2) {
49+
if (bytes === 0) return "0 Bytes";
50+
51+
const k = 1024;
52+
const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
53+
const i = Math.floor(Math.log(bytes) / Math.log(k));
54+
55+
const sizeInUnits = parseFloat((bytes / Math.pow(k, i)).toFixed(decimals));
56+
57+
return `${sizeInUnits} ${sizes[i]}`;
58+
}
59+
}

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)