Skip to content

Commit c590eb8

Browse files
author
Rick Butterfield
committed
v14 working!
1 parent 509794c commit c590eb8

33 files changed

+788
-511
lines changed

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

Lines changed: 3 additions & 3 deletions
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>1.0.1</VersionPrefix>
19+
<VersionPrefix>2.0.0</VersionPrefix>
2020
<VersionSuffix></VersionSuffix>
2121
<Authors>Umbraco Sustainability Community Team</Authors>
2222
<Copyright>$([System.DateTime]::UtcNow.ToString(`yyyy`)) © Umbraco Sustainability Community Team</Copyright>
@@ -32,8 +32,8 @@
3232
<ItemGroup>
3333
<PackageReference Include="Microsoft.Data.SqlClient" Version="5.2.0" />
3434
<PackageReference Include="Microsoft.Playwright" Version="1.40.0" />
35-
<PackageReference Include="Umbraco.Cms.Web.Website" Version="14.0.0-rc2" />
36-
<PackageReference Include="Umbraco.Cms.Api.Common" Version="14.0.0-rc2" />
35+
<PackageReference Include="Umbraco.Cms.Web.Website" Version="[14.0.0-rc2, 15.0.0)" />
36+
<PackageReference Include="Umbraco.Cms.Api.Common" Version="[14.0.0-rc2, 15.0.0)" />
3737
</ItemGroup>
3838

3939
<ItemGroup>
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { UmbElementMixin } from "@umbraco-cms/backoffice/element-api"
2+
import { LitElement, customElement, html, property } from "@umbraco-cms/backoffice/external/lit";
3+
import { UUIInterfaceColor } from "@umbraco-cms/backoffice/external/uui";
4+
5+
const elementName = "sustainability-carbon-rating";
6+
7+
@customElement(elementName)
8+
export class SustainabilityCarbonRating extends UmbElementMixin(LitElement) {
9+
10+
@property({type: String})
11+
carbonRating: string | null | undefined = undefined;
12+
13+
_getColour(carbonRating: string | null | undefined): UUIInterfaceColor {
14+
if (carbonRating == "E" || carbonRating == "F") {
15+
return "danger";
16+
}
17+
else if (carbonRating == "D") {
18+
return "warning";
19+
}
20+
else return "positive";
21+
}
22+
23+
render() {
24+
return html`
25+
<uui-tag .color=${this._getColour(this.carbonRating)}>
26+
${this.carbonRating}
27+
</uui-tag>
28+
`
29+
}
30+
}
31+
32+
export default SustainabilityCarbonRating;
33+
34+
declare global {
35+
interface HTMLElementTagNameMap {
36+
[elementName]: SustainabilityCarbonRating;
37+
}
38+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './carbon-rating.element';

src/Umbraco.Community.Sustainability/assets/src/dashboards/sustainability.dashboard.element.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export class SustainabilityOverviewDashboardElement extends UmbElementMixin(LitE
1010
@state()
1111
private _routes: UmbRoute[] = [
1212
{
13-
path: ``,
13+
path: '',
1414
component: () => import('./views/sustainability-overview.element')
1515
}
1616
];

src/Umbraco.Community.Sustainability/assets/src/dashboards/views/sustainability-overview.element.ts

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,23 @@ export class SustainabilityOverviewElement extends UmbLitElement {
1111

1212
#sustainabilityContext?: SustainabilityContext;
1313

14+
#localizeDateOptions: Intl.DateTimeFormatOptions = {
15+
year: 'numeric',
16+
month: '2-digit',
17+
day: '2-digit',
18+
hour: '2-digit',
19+
minute: '2-digit',
20+
hour12: true
21+
};
22+
1423
@state()
1524
_overviewData?: PagedResultPageMetricModel;
1625

1726
@state()
1827
_averageData?: AveragePageMetrics;
1928

2029
@state()
21-
_greenHost?: Boolean | undefined = undefined;
30+
_greenHost: boolean = false;
2231

2332
constructor() {
2433
super();
@@ -46,13 +55,13 @@ export class SustainabilityOverviewElement extends UmbLitElement {
4655
await this.#sustainabilityContext.getAverageData();
4756
}
4857

49-
hosting.check(window.location.hostname, 'Test').then((result: boolean) => {
50-
this._greenHost = result;
51-
})
58+
if (hosting.check(window.location.hostname, 'Test')) {
59+
this._greenHost = true;
60+
}
5261
}
5362

5463
#renderNoResults() {
55-
if (this._overviewData?.items.length === 0) {
64+
if (this._overviewData?.items?.length === 0) {
5665
return html`
5766
<uui-box>
5867
No data to show yet. Once you've run some tests, you'll see an overview of all your data here.
@@ -63,7 +72,7 @@ export class SustainabilityOverviewElement extends UmbLitElement {
6372

6473

6574
#renderResults() {
66-
if (this._overviewData?.items.length !== 0) {
75+
if (this._overviewData?.items?.length !== 0) {
6776
return html`
6877
<div id="left-column">
6978
<uui-box>
@@ -75,7 +84,7 @@ export class SustainabilityOverviewElement extends UmbLitElement {
7584
</uui-table-head>
7685
7786
${repeat(
78-
this._overviewData.items,
87+
this._overviewData?.items!,
7988
(item: PageMetric) => item,
8089
(item: PageMetric) => html`
8190
<uui-table-row>
@@ -85,19 +94,20 @@ export class SustainabilityOverviewElement extends UmbLitElement {
8594
</a>
8695
</uui-table-cell>
8796
<uui-table-cell>
88-
${item.requestDate}
97+
<umb-localize-date date=${item.requestDate} .options=${this.#localizeDateOptions}>
98+
</umb-localize-date>
8999
</uui-table-cell>
90100
<uui-table-cell>
91-
<uui-tag>
92-
${item.carbonRating}
93-
</uui-tag>
101+
<sustainability-carbon-rating
102+
.carbonRating=${item.carbonRating}>
103+
</sustainability-carbon-rating>
94104
</uui-table-cell>
95105
</uui-table-row>
96106
`
97107
)}
98108
</uui-table>
99109
100-
<uui-button look="primary" href="/umbraco#sustainability/sustainability/stats">
110+
<uui-button label="See more data" look="primary" href="/umbraco/section/sustainability/workspace/stats-root">
101111
See more data
102112
</uui-button>
103113
</uui-box>
@@ -106,6 +116,26 @@ export class SustainabilityOverviewElement extends UmbLitElement {
106116
}
107117
}
108118

119+
_calculateGrade(score: number): string {
120+
// grade using swd digital carbon ratings
121+
// https://sustainablewebdesign.org/digital-carbon-ratings/
122+
if (score < 0.095) {
123+
return 'A+';
124+
} else if (score < 0.186) {
125+
return 'A';
126+
} else if (score < 0.341) {
127+
return 'B';
128+
} else if (score < 0.493) {
129+
return 'C';
130+
} else if (score < 0.656) {
131+
return 'D';
132+
} else if (score < 0.846) {
133+
return 'E';
134+
} else {
135+
return 'F';
136+
}
137+
}
138+
109139
#renderGreenHostingValue() {
110140
if (this._greenHost === undefined) {
111141
return html`
@@ -132,23 +162,22 @@ export class SustainabilityOverviewElement extends UmbLitElement {
132162
}
133163

134164
#renderSidebar() {
135-
if (this._overviewData?.items.length !== 0) {
165+
if (this._overviewData?.items?.length !== 0) {
136166
return html`
137167
<div id="right-column">
138168
${this.#renderGreenHosting()}
139169
140170
<uui-box headline="Average carbon rating" style="margin-bottom: var(--uui-size-space-4);">
141-
<uui-tag>
142-
${this._averageData?.carbonRating}
143-
</uui-tag>
171+
<sustainability-carbon-rating .carbonRating=${this._calculateGrade(this._averageData?.emissions!)}>
172+
</sustainability-carbon-rating>
144173
</uui-box>
145174
146175
<uui-box headline="Average page size" style="margin-bottom: var(--uui-size-space-4);">
147-
${(this._averageData?.pageSize / 1024).toFixed(2)}KB
176+
${(this._averageData?.pageSize! / 1024).toFixed(2)}KB
148177
</uui-box>
149178
150179
<uui-box headline="Average CO₂ per page view">
151-
${this._averageData?.emissions.toFixed(4)}g
180+
${this._averageData?.emissions?.toFixed(4)}g
152181
</uui-box>
153182
154183
</div>

src/Umbraco.Community.Sustainability/assets/src/documents/views/sustainability-workspace-view.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export class SustainabilityWorkspaceElement extends UmbElementMixin(LitElement)
8181
return html`
8282
<uui-box headline="Loading sustainability report...">
8383
<p>It looks like you haven't run a report on this page yet. Click the button below to get started.</p>
84-
<uui-button look="primary" @click=${this.checkPage} .state=${this.waiting ? "waiting" : undefined}>
84+
<uui-button label="Run sustainability report" look="primary" @click=${this.checkPage} .state=${this.waiting ? "waiting" : undefined}>
8585
Run sustainability report
8686
</uui-button>
8787
</uui-box>
@@ -99,7 +99,7 @@ export class SustainabilityWorkspaceElement extends UmbElementMixin(LitElement)
9999
<div class="container">
100100
<uui-box headline="Sustainability report">
101101
<p><strong>Last tested:</strong> ${new Intl.DateTimeFormat('en-GB', { dateStyle: "long", timeStyle: "short" }).format(new Date(this.pageData?.lastRunDate!))}</p>
102-
<uui-button look="primary" @click=${this.checkPage} .state=${this.waiting ? "waiting" : undefined}>
102+
<uui-button label="Run again" look="primary" @click=${this.checkPage} .state=${this.waiting ? "waiting" : undefined}>
103103
Run again
104104
</uui-button>
105105
</uui-box>

src/Umbraco.Community.Sustainability/assets/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { UMB_AUTH_CONTEXT } from '@umbraco-cms/backoffice/auth';
88
import SustainabilityContext, { SUSTAINABILITY_CONTEXT } from './context/sustainability.context.ts';
99
import { OpenAPI } from './api/index.ts';
1010

11+
export * from './components/index';
1112
export * from './repository/index';
1213

1314
export const onInit: UmbEntryPointOnInit = (host, extensionRegistry) => {

src/Umbraco.Community.Sustainability/assets/src/section/manifests.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { ManifestMenu, ManifestSection, ManifestSectionSidebarAppMenuKind } from "@umbraco-cms/backoffice/extension-registry";
22

3+
import { manifests as overviewManifests } from './overview/manifests';
34
import { manifests as statsManifests } from './stats/manifests';
45

56
const sectionAlias = "Umb.Section.Sustainability";
@@ -47,5 +48,6 @@ export const manifests = [
4748
section,
4849
menu,
4950
menuSectionSidebarApp,
51+
...overviewManifests,
5052
...statsManifests
5153
]
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { manifests as menuItems } from './menu-item/manifests';
2+
import { manifests as workspaceManifests } from './workspace/manifests';
3+
4+
export const manifests = [
5+
...workspaceManifests,
6+
...menuItems
7+
]
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import type { ManifestMenuItem } from '@umbraco-cms/backoffice/extension-registry';
2+
import { SUSTAINABILITY_OVERVIEW_ROOT_ENTITY_TYPE } from '../types';
3+
4+
const menuItem: ManifestMenuItem = {
5+
type: 'menuItem',
6+
alias: 'Sustainability.MenuItem.Overview',
7+
name: 'Overview Menu Item',
8+
weight: 2000,
9+
meta: {
10+
label: 'Overview',
11+
icon: 'icon-eco',
12+
entityType: SUSTAINABILITY_OVERVIEW_ROOT_ENTITY_TYPE,
13+
menus: ["Umb.Menu.Sustainability"],
14+
}
15+
};
16+
17+
export const manifests = [menuItem];

0 commit comments

Comments
 (0)