feat-announcements.patch 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts
  2. index 2c18fde..e1031dd 100644
  3. --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts
  4. +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts
  5. @@ -312,2 +312,8 @@ configurationRegistry.registerConfiguration({
  6. },
  7. + 'workbench.welcomePage.extraAnnouncements': {
  8. + scope: ConfigurationScope.MACHINE,
  9. + type: 'boolean',
  10. + default: true,
  11. + description: localize('workbench.welcomePage.extraAnnouncements', "When enabled, the get started page loads additional announcements from VSCodium's repository.")
  12. + },
  13. 'workbench.startupEditor': {
  14. diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.ts b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.ts
  15. index 9564618..eb8adfe 100644
  16. --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.ts
  17. +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.ts
  18. @@ -116,4 +116,8 @@ type GettingStartedActionEvent = {
  19. type RecentEntry = (IRecentFolder | IRecentWorkspace) & { id: string };
  20. +type AnnouncementEntry = { id: string, title: string, url: string };
  21. const REDUCED_MOTION_KEY = 'workbench.welcomePage.preferReducedMotion';
  22. +
  23. +const BUILTIN_ANNOUNCEMENTS: AnnouncementEntry[] = [/* BUILTIN_ANNOUNCEMENTS */];
  24. +
  25. export class GettingStartedPage extends EditorPane {
  26. @@ -148,2 +152,4 @@ export class GettingStartedPage extends EditorPane {
  27. private gettingStartedList?: GettingStartedIndexList<IResolvedWalkthrough>;
  28. + private announcementList?: GettingStartedIndexList<AnnouncementEntry>;
  29. + private announcementData?: AnnouncementEntry[];
  30. @@ -760,3 +766,2 @@ export class GettingStartedPage extends EditorPane {
  31. -
  32. const leftColumn = $('.categories-column.categories-column-left', {},);
  33. @@ -767,2 +772,3 @@ export class GettingStartedPage extends EditorPane {
  34. const gettingStartedList = this.buildGettingStartedWalkthroughsList();
  35. + const announcementList = await this.buildAnnouncementList();
  36. @@ -777,3 +783,3 @@ export class GettingStartedPage extends EditorPane {
  37. this.container.classList.remove('noWalkthroughs');
  38. - reset(leftColumn, startList.getDomElement(), recentList.getDomElement());
  39. + reset(leftColumn, startList.getDomElement(), recentList.getDomElement(), announcementList.getDomElement());
  40. reset(rightColumn, gettingStartedList.getDomElement());
  41. @@ -783,3 +789,3 @@ export class GettingStartedPage extends EditorPane {
  42. this.container.classList.add('noWalkthroughs');
  43. - reset(leftColumn, startList.getDomElement());
  44. + reset(leftColumn, startList.getDomElement(), announcementList.getDomElement());
  45. reset(rightColumn, recentList.getDomElement());
  46. @@ -930,2 +936,51 @@ export class GettingStartedPage extends EditorPane {
  47. + private async buildAnnouncementList(): Promise<GettingStartedIndexList<AnnouncementEntry>> {
  48. + const renderAnnouncement = (announcement: AnnouncementEntry) => {
  49. + const { title, url } = announcement;
  50. + const li = $('li');
  51. +
  52. + const anchor: HTMLLinkElement = $('a');
  53. + anchor.href = url;
  54. + anchor.innerText = title;
  55. + anchor.target = '_blank';
  56. + li.appendChild(anchor);
  57. +
  58. + return li;
  59. + };
  60. +
  61. + if (this.announcementList) { this.announcementList.dispose(); }
  62. +
  63. + const announcementList = this.announcementList = new GettingStartedIndexList({
  64. + title: localize('announcements', "VSCodium Announcements"),
  65. + klass: 'announcements',
  66. + limit: 5,
  67. + empty: $('.empty-recent', {}, localize('noAnnouncements', "There are no current announcements.")),
  68. + renderElement: renderAnnouncement,
  69. + contextService: this.contextService
  70. + });
  71. +
  72. + if (!this.announcementData) {
  73. + const showExtras = this.configurationService.getValue<boolean>('workbench.welcomePage.extraAnnouncements');
  74. +
  75. + if (showExtras) {
  76. + const branch = this.productService.quality === 'insider' ? 'insider' : 'master';
  77. + const res = await fetch(`https://raw.githubusercontent.com/VSCodium/vscodium/${branch}/announcements-extra.json`);
  78. +
  79. + if (res.ok) {
  80. + var extraAnnouncements = await res.json() as AnnouncementEntry[];
  81. +
  82. + this.announcementData = [...extraAnnouncements, ...BUILTIN_ANNOUNCEMENTS];
  83. + } else {
  84. + this.announcementData = BUILTIN_ANNOUNCEMENTS;
  85. + }
  86. + } else {
  87. + this.announcementData = BUILTIN_ANNOUNCEMENTS;
  88. + }
  89. + }
  90. +
  91. + announcementList.setEntries(this.announcementData);
  92. +
  93. + return announcementList;
  94. + }
  95. +
  96. private buildStartList(): GettingStartedIndexList<IWelcomePageStartEntry> {