Skip to content

Commit 5deeb13

Browse files
author
Rick Butterfield
committed
Ensure resource-checker.js file is served correctly
1 parent a38157c commit 5deeb13

File tree

4 files changed

+94
-2
lines changed

4 files changed

+94
-2
lines changed

src/Umbraco.Community.Sustainability/Services/SustainabilityService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public async Task<SustainabilityResponse> GetSustainabilityData(string url)
2424
// Add our script to report data
2525
await page.AddScriptTagAsync(new PageAddScriptTagOptions()
2626
{
27-
Url = "/App_Plugins/UmbracoCommunitySustainability/js/resource-checker.js",
27+
Url = "/App_Plugins/Umbraco.Community.Sustainability.14/resource-checker.js",
2828
Type = "module"
2929
});
3030

src/Umbraco.Community.Sustainability/Umbraco.Community.Sustainability.csproj

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<RootNamespace>Umbraco.Community.Sustainability</RootNamespace>
1717
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
1818

19-
<VersionPrefix>2.0.3</VersionPrefix>
19+
<VersionPrefix>2.0.4</VersionPrefix>
2020
<VersionSuffix></VersionSuffix>
2121
<Authors>Umbraco Sustainability Community Team</Authors>
2222
<Copyright>$([System.DateTime]::UtcNow.ToString(`yyyy`)) © Umbraco Sustainability Community Team</Copyright>
@@ -28,6 +28,15 @@
2828
<RepositoryType>git</RepositoryType>
2929
<PackageReadmeFile>README_nuget.md</PackageReadmeFile>
3030
</PropertyGroup>
31+
<ItemGroup>
32+
<None Remove="assets\public\resource-checker.js" />
33+
</ItemGroup>
34+
<ItemGroup>
35+
<Content Include="assets\public\resource-checker.js">
36+
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
37+
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
38+
</Content>
39+
</ItemGroup>
3140

3241
<ItemGroup>
3342
<PackageReference Include="Microsoft.Playwright" Version="1.44.0" />
@@ -46,4 +55,10 @@
4655
</None>
4756
</ItemGroup>
4857

58+
<ItemGroup>
59+
<Content Update="wwwroot\App_Plugins\Umbraco.Community.Sustainability.14\resource-checker.js">
60+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
61+
</Content>
62+
</ItemGroup>
63+
4964
</Project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import { co2, hosting } from 'https://cdn.skypack.dev/@tgwf/[email protected]';
2+
3+
scrollPage();
4+
5+
export function scrollPage() {
6+
window.scrollTo({
7+
top: document.body.scrollHeight,
8+
behavior: 'smooth'
9+
});
10+
11+
setTimeout(reportEmissions, 2000);
12+
}
13+
14+
export async function reportEmissions() {
15+
const emissionsData = await getEmissionsData();
16+
17+
const emissionsDiv = document.createElement("div");
18+
emissionsDiv.setAttribute("data-testid", "sustainabilityData");
19+
emissionsDiv.innerHTML = JSON.stringify(emissionsData);
20+
21+
document.body.appendChild(emissionsDiv);
22+
}
23+
24+
export async function getEmissionsData() {
25+
const resources = getResources();
26+
const bytesSent = getTransferSize(resources);
27+
const hostCheck = await hosting.check(window.location.hostname);
28+
29+
const co2Emission = new co2({ model: "swd" });
30+
const emissions = co2Emission.perVisitTrace(bytesSent, hostCheck);
31+
32+
return {
33+
pageWeight: bytesSent,
34+
carbonRating: calculateGrade(emissions.co2),
35+
emissions: emissions,
36+
resources: resources
37+
};
38+
}
39+
40+
export function getResources() {
41+
return window.performance.getEntriesByType("resource");
42+
}
43+
44+
export function filterResourceByType(resources, entryType) {
45+
return resources.filter(
46+
(entry) => entry.initiatorType === entryType,
47+
);
48+
}
49+
50+
export function getTransferSize(resources) {
51+
let bytesSent = 0;
52+
resources.forEach((entry) => {
53+
bytesSent += entry.transferSize;
54+
});
55+
56+
return bytesSent;
57+
}
58+
59+
export function calculateGrade(score) {
60+
// grade using swd digital carbon ratings
61+
// https://sustainablewebdesign.org/digital-carbon-ratings/
62+
if (score < 0.095) {
63+
return 'A+';
64+
} else if (score < 0.186) {
65+
return 'A';
66+
} else if (score < 0.341) {
67+
return 'B';
68+
} else if (score < 0.493) {
69+
return 'C';
70+
} else if (score < 0.656) {
71+
return 'D';
72+
} else if (score < 0.846) {
73+
return 'E';
74+
} else {
75+
return 'F';
76+
}
77+
}

0 commit comments

Comments
 (0)