feat-announcements.patch 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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 e025130..f42db8d 100644
  3. --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts
  4. +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts
  5. @@ -343,2 +343,9 @@ 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 !!APP_NAME!!'s repository."),
  12. + tags: ['usesOnlineServices']
  13. + },
  14. 'workbench.startupEditor': {
  15. diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.ts b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.ts
  16. index 01778b2..615828d 100644
  17. --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.ts
  18. +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.ts
  19. @@ -117,4 +117,8 @@ type GettingStartedActionEvent = {
  20. type RecentEntry = (IRecentFolder | IRecentWorkspace) & { id: string };
  21. +type AnnouncementEntry = { id: string, title: string, url: string };
  22. const REDUCED_MOTION_KEY = 'workbench.welcomePage.preferReducedMotion';
  23. +
  24. +const BUILTIN_ANNOUNCEMENTS: AnnouncementEntry[] = [/* BUILTIN_ANNOUNCEMENTS */];
  25. +
  26. export class GettingStartedPage extends EditorPane {
  27. @@ -154,2 +158,4 @@ export class GettingStartedPage extends EditorPane {
  28. private gettingStartedList?: GettingStartedIndexList<IResolvedWalkthrough>;
  29. + private announcementList?: GettingStartedIndexList<AnnouncementEntry>;
  30. + private announcementData?: AnnouncementEntry[];
  31. @@ -880,2 +886,3 @@ export class GettingStartedPage extends EditorPane {
  32. const gettingStartedList = this.buildGettingStartedWalkthroughsList();
  33. + const announcementList = await this.buildAnnouncementList();
  34. @@ -890,3 +897,3 @@ export class GettingStartedPage extends EditorPane {
  35. this.container.classList.remove('noWalkthroughs');
  36. - reset(rightColumn, gettingStartedList.getDomElement());
  37. + reset(rightColumn, gettingStartedList.getDomElement(), announcementList.getDomElement());
  38. }
  39. @@ -894,3 +901,3 @@ export class GettingStartedPage extends EditorPane {
  40. this.container.classList.add('noWalkthroughs');
  41. - reset(rightColumn);
  42. + reset(rightColumn, announcementList.getDomElement());
  43. }
  44. @@ -1047,2 +1054,55 @@ export class GettingStartedPage extends EditorPane {
  45. + private async buildAnnouncementList(): Promise<GettingStartedIndexList<AnnouncementEntry>> {
  46. + const renderAnnouncement = (announcement: AnnouncementEntry) => {
  47. + const { title, url } = announcement;
  48. + const li = $('li');
  49. +
  50. + const anchor: HTMLLinkElement = $('a');
  51. + anchor.href = url;
  52. + anchor.innerText = title;
  53. + anchor.target = '_blank';
  54. + li.appendChild(anchor);
  55. +
  56. + return li;
  57. + };
  58. +
  59. + if (this.announcementList) { this.announcementList.dispose(); }
  60. +
  61. + const announcementList = this.announcementList = new GettingStartedIndexList({
  62. + title: localize('announcements', "!!APP_NAME!! Announcements"),
  63. + klass: 'announcements',
  64. + limit: 5,
  65. + empty: $('.empty-recent', {}, localize('noAnnouncements', "There are no current announcements.")),
  66. + renderElement: renderAnnouncement,
  67. + contextService: this.contextService
  68. + });
  69. +
  70. + if (!this.announcementData) {
  71. + const showExtras = this.configurationService.getValue<boolean>('workbench.welcomePage.extraAnnouncements');
  72. +
  73. + if (showExtras) {
  74. + const branch = this.productService.quality === 'insider' ? 'insider' : 'master';
  75. + await fetch(`https://raw.githubusercontent.com/!!GH_REPO_PATH!!/${branch}/announcements-extra.json`)
  76. + .then(async res => {
  77. + if (res.ok) {
  78. + var extraAnnouncements = await res.json() as AnnouncementEntry[];
  79. +
  80. + this.announcementData = [...extraAnnouncements, ...BUILTIN_ANNOUNCEMENTS];
  81. + } else {
  82. + this.announcementData = BUILTIN_ANNOUNCEMENTS;
  83. + }
  84. + })
  85. + .catch(err => {
  86. + this.announcementData = BUILTIN_ANNOUNCEMENTS;
  87. + });
  88. + } else {
  89. + this.announcementData = BUILTIN_ANNOUNCEMENTS;
  90. + }
  91. + }
  92. +
  93. + announcementList.setEntries(this.announcementData);
  94. +
  95. + return announcementList;
  96. + }
  97. +
  98. private buildStartList(): GettingStartedIndexList<IWelcomePageStartEntry> {