Skip to content

Commit 756629c

Browse files
committed
Add biome
1 parent 9af967d commit 756629c

5 files changed

Lines changed: 182 additions & 123 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/node_modules/
2+
/package-lock.json

biome.json

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
{
2+
"$schema": "https://biomejs.dev/schemas/2.2.4/schema.json",
3+
"vcs": {
4+
"enabled": false,
5+
"clientKind": "git",
6+
"useIgnoreFile": false
7+
},
8+
"files": {
9+
"ignoreUnknown": false
10+
},
11+
"formatter": {
12+
"enabled": true,
13+
"indentStyle": "tab"
14+
},
15+
"linter": {
16+
"enabled": true,
17+
"rules": {
18+
"recommended": true,
19+
"complexity": {
20+
"noImportantStyles": "off"
21+
},
22+
"style": {
23+
"noDescendingSpecificity": "off"
24+
}
25+
}
26+
},
27+
"javascript": {
28+
"formatter": {
29+
"quoteStyle": "single"
30+
}
31+
},
32+
"assist": {
33+
"enabled": true,
34+
"actions": {
35+
"source": {
36+
"organizeImports": "on"
37+
}
38+
}
39+
}
40+
}

package.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"private": true,
3+
"scripts": {
4+
"test": "biome check",
5+
"fix": "biome check --write"
6+
},
7+
"devDependencies": {
8+
"@biomejs/biome": "2.2.4"
9+
}
10+
}

static/main.js

Lines changed: 85 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,47 @@
1-
fetch( 'https://api.github.com/repositories/42366054' )
2-
.then( function( response )
3-
{
4-
if( !response.ok )
5-
{
6-
throw new Error( 'Failed to fetch github repo info' );
1+
fetch('https://api.github.com/repositories/42366054')
2+
.then((response) => {
3+
if (!response.ok) {
4+
throw new Error('Failed to fetch github repo info');
75
}
86

97
return response.json();
10-
} )
11-
.then( function( response )
12-
{
13-
const starsCount = document.getElementById( 'js-stars-count' );
14-
const formatter = new Intl.NumberFormat( 'en', { notation: 'compact' } );
15-
starsCount.textContent = formatter.format( response.stargazers_count );
16-
} );
17-
18-
fetch( 'https://api.github.com/repositories/42366054/releases?per_page=5', {
8+
})
9+
.then((response) => {
10+
const starsCount = document.getElementById('js-stars-count');
11+
const formatter = new Intl.NumberFormat('en', { notation: 'compact' });
12+
starsCount.textContent = formatter.format(response.stargazers_count);
13+
});
14+
15+
fetch('https://api.github.com/repositories/42366054/releases?per_page=5', {
1916
headers: {
2017
Accept: 'application/vnd.github.html+json',
2118
},
22-
} )
23-
.then( function( response )
24-
{
25-
if( !response.ok )
26-
{
27-
throw new Error( 'Failed to fetch github releases' );
19+
})
20+
.then((response) => {
21+
if (!response.ok) {
22+
throw new Error('Failed to fetch github releases');
2823
}
2924

3025
return response.json();
31-
} )
32-
.then( function( releases )
33-
{
34-
if( !releases || releases.length === 0 )
35-
{
26+
})
27+
.then((releases) => {
28+
if (!releases || releases.length === 0) {
3629
return;
3730
}
3831

39-
const latestRelease = releases[ 0 ];
32+
const latestRelease = releases[0];
4033

41-
for( const asset of latestRelease.assets )
42-
{
43-
if( asset.name === 'Source2Viewer.exe' )
44-
{
45-
document.getElementById( 'js-download' ).href = asset.browser_download_url;
34+
for (const asset of latestRelease.assets) {
35+
if (asset.name === 'Source2Viewer.exe') {
36+
document.getElementById('js-download').href =
37+
asset.browser_download_url;
4638

47-
const version = document.querySelector( '.download-version' );
39+
const version = document.querySelector('.download-version');
4840

4941
let string = `View release notes for v${latestRelease.tag_name}`;
5042

51-
if( window.innerWidth > 500 )
52-
{
53-
const date = new Date( latestRelease.published_at );
43+
if (window.innerWidth > 500) {
44+
const date = new Date(latestRelease.published_at);
5445
string += `, released on ${date.toLocaleDateString()}`;
5546
}
5647

@@ -59,129 +50,117 @@ fetch( 'https://api.github.com/repositories/42366054/releases?per_page=5', {
5950
}
6051
}
6152

62-
const releaseNotesContainer = document.getElementById( 'release-notes' );
53+
const releaseNotesContainer = document.getElementById('release-notes');
6354

64-
releases.forEach( function( release, index )
65-
{
55+
releases.forEach((release, index) => {
6656
const isLatest = index === 0;
6757

68-
const releaseSection = document.createElement( 'div' );
58+
const releaseSection = document.createElement('div');
6959
releaseSection.className = 'release-notes-content';
7060

71-
const releaseHeader = document.createElement( 'a' );
61+
const releaseHeader = document.createElement('a');
7262
releaseHeader.className = 'release-version';
7363
releaseHeader.href = release.html_url;
7464
releaseHeader.target = '_blank';
7565
releaseHeader.rel = 'noopener';
76-
const releaseDate = new Date( release.published_at );
66+
const releaseDate = new Date(release.published_at);
7767
releaseHeader.textContent = `v${release.tag_name} - ${releaseDate.toLocaleDateString()}`;
78-
releaseSection.appendChild( releaseHeader );
68+
releaseSection.appendChild(releaseHeader);
7969

80-
const releaseContent = document.createElement( 'div' );
70+
const releaseContent = document.createElement('div');
8171
releaseContent.className = 'release-content';
8272
releaseContent.innerHTML = release.body_html;
83-
releaseSection.appendChild( releaseContent );
73+
releaseSection.appendChild(releaseContent);
8474

85-
if( isLatest )
86-
{
87-
const releaseAssetsContainer = document.createElement( 'div' );
75+
if (isLatest) {
76+
const releaseAssetsContainer = document.createElement('div');
8877
releaseAssetsContainer.className = 'release-assets';
8978
releaseAssetsContainer.id = 'js-release-assets';
9079

91-
for( const asset of release.assets )
92-
{
80+
for (const asset of release.assets) {
9381
let name = asset.name;
9482

95-
if( name.endsWith( '.zip' ) )
96-
{
97-
name = name.substring( 0, name.length - 4 ).replace( /-/g, ' ' );
83+
if (name.endsWith('.zip')) {
84+
name = name.substring(0, name.length - 4).replace(/-/g, ' ');
9885
}
9986

100-
const assetLink = document.createElement( 'a' );
87+
const assetLink = document.createElement('a');
10188
assetLink.href = asset.browser_download_url;
10289
assetLink.className = 'asset-link';
10390
assetLink.download = '';
10491
assetLink.textContent = name;
105-
releaseAssetsContainer.appendChild( assetLink );
92+
releaseAssetsContainer.appendChild(assetLink);
10693
}
10794

108-
const githubLink = document.createElement( 'a' );
95+
const githubLink = document.createElement('a');
10996
githubLink.href = release.html_url;
11097
githubLink.className = 'asset-link';
11198
githubLink.target = '_blank';
11299
githubLink.rel = 'noopener';
113100
githubLink.textContent = 'View release on GitHub';
114-
releaseAssetsContainer.appendChild( githubLink );
101+
releaseAssetsContainer.appendChild(githubLink);
115102

116-
releaseSection.appendChild( releaseAssetsContainer );
103+
releaseSection.appendChild(releaseAssetsContainer);
117104
}
118105

119-
releaseNotesContainer.appendChild( releaseSection );
120-
} );
121-
} );
106+
releaseNotesContainer.appendChild(releaseSection);
107+
});
108+
});
122109

123-
function LoadWorkshop()
124-
{
125-
fetch( 'https://steamdb.info/api/Source2ViewerWorkshop/' )
126-
.then( function( response )
127-
{
128-
if( !response.ok )
129-
{
130-
throw new Error( 'Failed to fetch workshop items' );
110+
function LoadWorkshop() {
111+
fetch('https://steamdb.info/api/Source2ViewerWorkshop/')
112+
.then((response) => {
113+
if (!response.ok) {
114+
throw new Error('Failed to fetch workshop items');
131115
}
132116

133117
return response.json();
134-
} )
135-
.then( function( response )
136-
{
137-
if( !response.success || !response.data )
138-
{
139-
throw new Error( 'Failed to fetch workshop items' );
118+
})
119+
.then((response) => {
120+
if (!response.success || !response.data) {
121+
throw new Error('Failed to fetch workshop items');
140122
}
141123

142124
const dateFormatter = new Intl.DateTimeFormat(undefined, {
143125
dateStyle: 'medium',
144126
});
145127

146-
const dom = document.querySelectorAll( '.workshop-item' );
128+
const dom = document.querySelectorAll('.workshop-item');
147129

148-
for( let i = 0; i < response.data.length && i < dom.length; i++ )
149-
{
150-
const file = response.data[ i ];
151-
const element = dom[ i ];
152-
const date = new Date( file.time_created * 1000 );
130+
for (let i = 0; i < response.data.length && i < dom.length; i++) {
131+
const file = response.data[i];
132+
const element = dom[i];
133+
const date = new Date(file.time_created * 1000);
153134

154135
const params = new URLSearchParams();
155-
params.set( 'id', file.id );
156-
params.set( 'utm_source', 'Source 2 Viewer' );
157-
params.set( 'searchtext', 'valveresourceformat' );
136+
params.set('id', file.id);
137+
params.set('utm_source', 'Source 2 Viewer');
138+
params.set('searchtext', 'valveresourceformat');
158139

159140
element.href = `https://steamcommunity.com/sharedfiles/filedetails/?${params}`;
160-
element.querySelector( '.workshop-image' ).src = file.preview_url;
161-
element.querySelector( '.workshop-title' ).textContent = file.title;
162-
element.querySelector( '.workshop-info' ).textContent = `${dateFormatter.format(date)}${file.subscriptions.toLocaleString()} subscribers`;
141+
element.querySelector('.workshop-image').src = file.preview_url;
142+
element.querySelector('.workshop-title').textContent = file.title;
143+
element.querySelector('.workshop-info').textContent =
144+
`${dateFormatter.format(date)}${file.subscriptions.toLocaleString()} subscribers`;
163145
}
164-
} );
146+
});
165147
}
166148

167-
if( 'IntersectionObserver' in window )
168-
{
169-
const observer = new window.IntersectionObserver( entries =>
170-
{
171-
entries.forEach( entry =>
149+
if ('IntersectionObserver' in window) {
150+
const observer = new window.IntersectionObserver(
151+
(entries) => {
152+
entries.forEach((entry) => {
153+
if (entry.isIntersecting) {
154+
observer.disconnect();
155+
LoadWorkshop();
156+
}
157+
});
158+
},
172159
{
173-
if( entry.isIntersecting )
174-
{
175-
observer.disconnect();
176-
LoadWorkshop();
177-
}
178-
} );
179-
}, {
180-
rootMargin: '200px 0px 0px 0px'
181-
} );
182-
observer.observe( document.querySelector( '.workshop' ) );
183-
}
184-
else
185-
{
160+
rootMargin: '200px 0px 0px 0px',
161+
},
162+
);
163+
observer.observe(document.querySelector('.workshop'));
164+
} else {
186165
LoadWorkshop();
187166
}

0 commit comments

Comments
 (0)