Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions packages/core/i18n/nls.json
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,9 @@
"update-version-version-error": "Failed to install version {0} of {1}."
}
},
"vsx-extension": {
"averageRating": "Average rating: {0} out of 5"
},
"webview": {
"goToReadme": "Go To README",
"messageWarning": " The {0} endpoint's host pattern has been changed to `{1}`; changing the pattern can lead to security vulnerabilities. See `{2}` for more information."
Expand Down
3 changes: 3 additions & 0 deletions packages/core/i18n/nls.zh-cn.json
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,9 @@
"update-version-version-error": "{0} 在安装{1} 的版本时失败。"
}
},
"vsx-extension": {
"averageRating": "平均评分:{0} 分(共 5 分)"
},
"webview": {
"goToReadme": "转到README",
"messageWarning": " {0}端点的主机模式已改为`{1}`;改变模式可能导致安全漏洞。 参见`{2}`以了解更多信息。"
Expand Down
6 changes: 6 additions & 0 deletions packages/vsx-registry/src/browser/style/index.css
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,12 @@
font-size: 110%;
}

.theia-vsx-extension-content .title .stat .download-count,
.theia-vsx-extension-content .title .stat .average-rating {
display: inline-flex;
align-items: center;
}

.theia-vsx-extension-content .title .stat .average-rating > i {
color: #ff8e00;
}
Expand Down
16 changes: 11 additions & 5 deletions packages/vsx-registry/src/browser/vsx-extension.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ export class VSXExtension implements VSXExtensionData, TreeElement {
}

if (this.averageRating) {
md += ` \rAverage Rating: ${this.averageRating.toFixed(1)}`;
md += ` \r${getAverageRatingTitle(this.averageRating)}`;
}

return markdownit().render(md);
Expand Down Expand Up @@ -443,7 +443,10 @@ export namespace AbstractVSXExtensionComponent {

const downloadFormatter = new Intl.NumberFormat();
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const downloadCompactFormatter = new Intl.NumberFormat(undefined, { notation: 'compact', compactDisplay: 'short' } as any);
const downloadCompactFormatter = new Intl.NumberFormat('en-US', { notation: 'compact', compactDisplay: 'short' } as any);
const averageRatingFormatter = (averageRating: number): number => Math.round(averageRating * 2) / 2;
const getAverageRatingTitle = (averageRating: number): string =>
nls.localize('theia/vsx-extension/averageRating', 'Average rating: {0} out of 5', averageRatingFormatter(averageRating));

export namespace VSXExtensionComponent {
export interface Props extends AbstractVSXExtensionComponent.Props {
Expand All @@ -466,7 +469,7 @@ export class VSXExtensionComponent<Props extends VSXExtensionComponent.Props = V
</div>
<div className='stat'>
{!!downloadCount && <span className='download-count'><i className={codicon('cloud-download')} />{downloadCompactFormatter.format(downloadCount)}</span>}
{!!averageRating && <span className='average-rating'><i className={codicon('star-full')} />{averageRating.toFixed(1)}</span>}
{!!averageRating && <span className='average-rating'><i className={codicon('star-full')} />{averageRatingFormatter(averageRating)}</span>}
</div>
</div>
<div className='noWrapInfo theia-vsx-extension-description'>{description}</div>
Expand Down Expand Up @@ -516,7 +519,10 @@ export class VSXExtensionEditorComponent extends AbstractVSXExtensionComponent {
</span>
{!!downloadCount && <span className='download-count' onClick={this.openExtension}>
<i className={codicon('cloud-download')} />{downloadFormatter.format(downloadCount)}</span>}
{averageRating !== undefined && <span className='average-rating' onClick={this.openAverageRating}>{this.renderStars()}</span>}
{
averageRating !== undefined &&
<span className='average-rating' title={getAverageRatingTitle(averageRating)} onClick={this.openAverageRating}>{this.renderStars()}</span>
}
{repository && <span className='repository' onClick={this.openRepository}>Repository</span>}
{license && <span className='license' onClick={this.openLicense}>{license}</span>}
{version && <span className='version'>{VSXExtension.formatVersion(version)}</span>}
Expand All @@ -527,7 +533,7 @@ export class VSXExtensionEditorComponent extends AbstractVSXExtensionComponent {
</div>
{
sanitizedReadme &&
< div className='scroll-container'
<div className='scroll-container'
style={scrollStyle}
ref={ref => this._scrollContainer = (ref || undefined)}>
<div className='body'
Expand Down