@lvce-editor/extension-detail-view 3.40.0 → 3.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2136,7 +2136,8 @@ const create = (uid, uri, x, y, width, height, platform, assetDir) => {
2136
2136
  themesMarkdownDom: [],
2137
2137
  uri,
2138
2138
  webViews: [],
2139
- width
2139
+ width,
2140
+ readmeUrl: ''
2140
2141
  };
2141
2142
  set$1(uid, state, state);
2142
2143
  };
@@ -2297,8 +2298,7 @@ const {
2297
2298
  set,
2298
2299
  setColorTheme: setColorTheme$1,
2299
2300
  uninstallExtension,
2300
- sendMessagePortToMarkdownWorker: sendMessagePortToMarkdownWorker$1
2301
- } = RendererWorker;
2301
+ sendMessagePortToMarkdownWorker: sendMessagePortToMarkdownWorker$1} = RendererWorker;
2302
2302
 
2303
2303
  const setColorTheme = id => {
2304
2304
  return setColorTheme$1(id);
@@ -2409,17 +2409,25 @@ const loadChangelogContent = async path => {
2409
2409
  const selectTabChangelog = async state => {
2410
2410
  const {
2411
2411
  extension,
2412
- baseUrl
2412
+ baseUrl,
2413
+ tabs
2413
2414
  } = state;
2414
2415
  const changelogContent = await loadChangelogContent(extension.path); // TODO use uri
2415
2416
  const changelogMarkdownHtml = await renderMarkdown(changelogContent, {
2416
2417
  baseUrl
2417
2418
  });
2418
2419
  const changelogDom = await getMarkdownVirtualDom(changelogMarkdownHtml);
2420
+ const newTabs = tabs.map(tab => {
2421
+ return {
2422
+ ...tab,
2423
+ selected: tab.name === Changelog
2424
+ };
2425
+ });
2419
2426
  return {
2420
2427
  ...state,
2421
2428
  selectedTab: Changelog,
2422
- changelogVirtualDom: changelogDom
2429
+ changelogVirtualDom: changelogDom,
2430
+ tabs: newTabs
2423
2431
  };
2424
2432
  };
2425
2433
 
@@ -2427,9 +2435,8 @@ const selectTabDefault = async state => {
2427
2435
  return state;
2428
2436
  };
2429
2437
 
2430
- const loadReadmeContent = async path => {
2438
+ const loadReadmeContent = async readmeUrl => {
2431
2439
  try {
2432
- const readmeUrl = join(path, 'README.md');
2433
2440
  const readmeContent = await readFile(readmeUrl);
2434
2441
  return readmeContent;
2435
2442
  } catch (error) {
@@ -2445,18 +2452,26 @@ const loadReadmeContent = async path => {
2445
2452
 
2446
2453
  const selectTabDetails = async state => {
2447
2454
  const {
2448
- extension,
2449
- baseUrl
2455
+ baseUrl,
2456
+ readmeUrl,
2457
+ tabs
2450
2458
  } = state;
2451
- const readmeContent = await loadReadmeContent(extension.path);
2459
+ const readmeContent = await loadReadmeContent(readmeUrl);
2452
2460
  const readmeHtml = await renderMarkdown(readmeContent, {
2453
2461
  baseUrl
2454
2462
  });
2455
2463
  const detailsDom = await getMarkdownVirtualDom(readmeHtml);
2464
+ const newTabs = tabs.map(tab => {
2465
+ return {
2466
+ ...tab,
2467
+ selected: tab.name === Details
2468
+ };
2469
+ });
2456
2470
  return {
2457
2471
  ...state,
2458
2472
  selectedTab: Details,
2459
- detailsVirtualDom: detailsDom
2473
+ detailsVirtualDom: detailsDom,
2474
+ tabs: newTabs
2460
2475
  };
2461
2476
  };
2462
2477
 
@@ -2465,7 +2480,8 @@ const selectTabFeatures = async state => {
2465
2480
  extension,
2466
2481
  baseUrl,
2467
2482
  selectedFeature,
2468
- features
2483
+ features,
2484
+ tabs
2469
2485
  } = state;
2470
2486
  if (features.length === 0) {
2471
2487
  return state;
@@ -2473,10 +2489,17 @@ const selectTabFeatures = async state => {
2473
2489
  const actualSelectedFeature = selectedFeature || Theme;
2474
2490
  const fn = getFeatureDetailsHandler(actualSelectedFeature);
2475
2491
  const partialNewState = await fn(extension, baseUrl);
2492
+ const newTabs = tabs.map(tab => {
2493
+ return {
2494
+ ...tab,
2495
+ selected: tab.name === Features
2496
+ };
2497
+ });
2476
2498
  return {
2477
2499
  ...state,
2478
2500
  selectedTab: Features,
2479
2501
  selectedFeature: features[0].id || '',
2502
+ tabs: newTabs,
2480
2503
  ...partialNewState
2481
2504
  };
2482
2505
  };
@@ -2529,6 +2552,11 @@ const initialize = async () => {
2529
2552
  // TODO create connection to file system worker
2530
2553
  };
2531
2554
 
2555
+ const existsFile = async uri => {
2556
+ // TODO ask file system worker
2557
+ return true;
2558
+ };
2559
+
2532
2560
  const Web = 1;
2533
2561
  const Electron = 2;
2534
2562
  const Remote = 3;
@@ -2584,6 +2612,150 @@ const getBaseUrl = (extensionPath, platform) => {
2584
2612
  }
2585
2613
  };
2586
2614
 
2615
+ const getExtensionDetailButtons = (hasColorTheme, isBuiltin) => {
2616
+ const allActions = [{
2617
+ label: setColorTheme$3(),
2618
+ onClick: HandleClickSetColorTheme,
2619
+ enabled: hasColorTheme,
2620
+ name: SetColorTheme
2621
+ }, {
2622
+ label: disable(),
2623
+ onClick: HandleClickDisable,
2624
+ enabled: true,
2625
+ name: Disable
2626
+ }, {
2627
+ label: uninstall(),
2628
+ onClick: HandleClickUninstall,
2629
+ enabled: !isBuiltin,
2630
+ name: Uninstall
2631
+ }];
2632
+ return allActions;
2633
+ };
2634
+
2635
+ const getExtensionIdFromUri = uri => {
2636
+ const id = uri.slice('extension-detail://'.length);
2637
+ return id;
2638
+ };
2639
+
2640
+ const getTabs = (selectedTab, hasReadme, hasFeatures, hasChangelog) => {
2641
+ const tabs = [{
2642
+ label: details(),
2643
+ name: Details,
2644
+ selected: selectedTab === Details,
2645
+ enabled: hasReadme
2646
+ }, {
2647
+ label: features$1(),
2648
+ name: Features,
2649
+ selected: selectedTab === Features,
2650
+ enabled: hasFeatures
2651
+ }, {
2652
+ label: changelog(),
2653
+ name: Changelog,
2654
+ selected: selectedTab === Changelog,
2655
+ enabled: hasChangelog
2656
+ }];
2657
+ return tabs;
2658
+ };
2659
+
2660
+ const Small = 1;
2661
+ const Normal = 2;
2662
+ const Large = 3;
2663
+
2664
+ const getViewletSize = width => {
2665
+ if (width < 180) {
2666
+ return Small;
2667
+ }
2668
+ if (width < 768) {
2669
+ return Normal;
2670
+ }
2671
+ return Large;
2672
+ };
2673
+
2674
+ const isLanguageBasicsExtension = extension => {
2675
+ return extension.name && extension.name.startsWith('Language Basics');
2676
+ };
2677
+
2678
+ const isThemeExtension = extension => {
2679
+ return extension.name && extension.name.endsWith(' Theme');
2680
+ };
2681
+
2682
+ const getIcon = (extension, platform, assetDir) => {
2683
+ if (!extension) {
2684
+ return extensionDefaultIcon(assetDir);
2685
+ }
2686
+ if (!extension.path || !extension.icon) {
2687
+ if (isLanguageBasicsExtension(extension)) {
2688
+ return extensionLanguageBasics(assetDir);
2689
+ }
2690
+ if (isThemeExtension(extension)) {
2691
+ return extensionTheme(assetDir);
2692
+ }
2693
+ return extensionDefaultIcon(assetDir);
2694
+ }
2695
+ if (platform === Remote || platform === Electron) {
2696
+ if (extension.builtin) {
2697
+ return `${assetDir}/extensions/${extension.id}/${extension.icon}`;
2698
+ }
2699
+ return `/remote/${extension.path}/${extension.icon}`; // TODO support windows paths
2700
+ }
2701
+ return '';
2702
+ };
2703
+
2704
+ const getDescription = extension => {
2705
+ if (!extension || !extension.description) {
2706
+ return 'n/a';
2707
+ }
2708
+ return extension.description;
2709
+ };
2710
+
2711
+ const getName = extension => {
2712
+ if (extension && extension.name) {
2713
+ return extension.name;
2714
+ }
2715
+ if (extension && extension.id) {
2716
+ return extension.id;
2717
+ }
2718
+ return 'n/a';
2719
+ };
2720
+
2721
+ const getBadge = (builtin, badgeEnabled) => {
2722
+ if (builtin && badgeEnabled) {
2723
+ return 'builtin';
2724
+ }
2725
+ return '';
2726
+ };
2727
+
2728
+ const hasColorThemes = extension => {
2729
+ return Boolean(extension && extension.colorThemes && extension.colorThemes.length > 0);
2730
+ };
2731
+
2732
+ const loadHeaderContent = (state, platform, extension) => {
2733
+ const {
2734
+ assetDir,
2735
+ builtinExtensionsBadgeEnabled
2736
+ } = state;
2737
+ const iconSrc = getIcon(extension, platform, assetDir);
2738
+ const description = getDescription(extension);
2739
+ const name = getName(extension);
2740
+ const extensionUri = extension.uri || extension.path;
2741
+ const extensionId = extension?.id || 'n/a';
2742
+ const extensionVersion = extension?.version || 'n/a';
2743
+ const hasColorTheme = hasColorThemes(extension);
2744
+ const isBuiltin = extension?.builtin;
2745
+ const badge = getBadge(isBuiltin, builtinExtensionsBadgeEnabled);
2746
+ return {
2747
+ badge,
2748
+ description,
2749
+ extension,
2750
+ extensionId,
2751
+ extensionUri,
2752
+ extensionVersion,
2753
+ hasColorTheme,
2754
+ iconSrc,
2755
+ name
2756
+ };
2757
+ };
2758
+
2587
2759
  const getCategories = () => {
2588
2760
  // TODO
2589
2761
  return [{
@@ -2685,31 +2857,6 @@ const getDisplaySize = size => {
2685
2857
  });
2686
2858
  };
2687
2859
 
2688
- const getExtensionDetailButtons = (hasColorTheme, isBuiltin) => {
2689
- const allActions = [{
2690
- label: setColorTheme$3(),
2691
- onClick: HandleClickSetColorTheme,
2692
- enabled: hasColorTheme,
2693
- name: SetColorTheme
2694
- }, {
2695
- label: disable(),
2696
- onClick: HandleClickDisable,
2697
- enabled: true,
2698
- name: Disable
2699
- }, {
2700
- label: uninstall(),
2701
- onClick: HandleClickUninstall,
2702
- enabled: !isBuiltin,
2703
- name: Uninstall
2704
- }];
2705
- return allActions;
2706
- };
2707
-
2708
- const getExtensionIdFromUri = uri => {
2709
- const id = uri.slice('extension-detail://'.length);
2710
- return id;
2711
- };
2712
-
2713
2860
  const getFolderSize = async uri => {
2714
2861
  if (!uri) {
2715
2862
  throw new VError(`uri is required`);
@@ -2778,122 +2925,20 @@ const getResources = isBuiltin => {
2778
2925
  }];
2779
2926
  };
2780
2927
 
2781
- const getTabs = (selectedTab, hasReadme, hasFeatures, hasChangelog) => {
2782
- const tabs = [{
2783
- label: details(),
2784
- name: Details,
2785
- selected: selectedTab === Details,
2786
- enabled: hasReadme
2787
- }, {
2788
- label: features$1(),
2789
- name: Features,
2790
- selected: selectedTab === Features,
2791
- enabled: hasFeatures
2792
- }, {
2793
- label: changelog(),
2794
- name: Changelog,
2795
- selected: selectedTab === Changelog,
2796
- enabled: hasChangelog
2797
- }];
2798
- return tabs;
2799
- };
2800
-
2801
- const Small = 1;
2802
- const Normal = 2;
2803
- const Large = 3;
2804
-
2805
- const getViewletSize = width => {
2806
- if (width < 180) {
2807
- return Small;
2808
- }
2809
- if (width < 768) {
2810
- return Normal;
2811
- }
2812
- return Large;
2813
- };
2814
-
2815
- const isLanguageBasicsExtension = extension => {
2816
- return extension.name && extension.name.startsWith('Language Basics');
2817
- };
2818
-
2819
- const isThemeExtension = extension => {
2820
- return extension.name && extension.name.endsWith(' Theme');
2821
- };
2822
-
2823
- const getIcon = (extension, platform, assetDir) => {
2824
- if (!extension) {
2825
- return extensionDefaultIcon(assetDir);
2826
- }
2827
- if (!extension.path || !extension.icon) {
2828
- if (isLanguageBasicsExtension(extension)) {
2829
- return extensionLanguageBasics(assetDir);
2830
- }
2831
- if (isThemeExtension(extension)) {
2832
- return extensionTheme(assetDir);
2833
- }
2834
- return extensionDefaultIcon(assetDir);
2835
- }
2836
- if (platform === Remote || platform === Electron) {
2837
- if (extension.builtin) {
2838
- return `${assetDir}/extensions/${extension.id}/${extension.icon}`;
2839
- }
2840
- return `/remote/${extension.path}/${extension.icon}`; // TODO support windows paths
2841
- }
2842
- return '';
2843
- };
2844
-
2845
- const getDescription = extension => {
2846
- if (!extension || !extension.description) {
2847
- return 'n/a';
2848
- }
2849
- return extension.description;
2850
- };
2851
-
2852
- const getName = extension => {
2853
- if (extension && extension.name) {
2854
- return extension.name;
2855
- }
2856
- if (extension && extension.id) {
2857
- return extension.id;
2858
- }
2859
- return 'n/a';
2860
- };
2861
-
2862
- const getBadge = (builtin, badgeEnabled) => {
2863
- if (builtin && badgeEnabled) {
2864
- return 'builtin';
2865
- }
2866
- return '';
2867
- };
2868
-
2869
- const hasColorThemes = extension => {
2870
- return Boolean(extension && extension.colorThemes && extension.colorThemes.length > 0);
2871
- };
2872
-
2873
- const loadHeaderContent = (state, platform, extension) => {
2874
- const {
2875
- assetDir,
2876
- builtinExtensionsBadgeEnabled
2877
- } = state;
2878
- const iconSrc = getIcon(extension, platform, assetDir);
2879
- const description = getDescription(extension);
2880
- const name = getName(extension);
2881
- const extensionUri = extension.uri || extension.path;
2882
- const extensionId = extension?.id || 'n/a';
2883
- const extensionVersion = extension?.version || 'n/a';
2884
- const hasColorTheme = hasColorThemes(extension);
2885
- const isBuiltin = extension?.builtin;
2886
- const badge = getBadge(isBuiltin, builtinExtensionsBadgeEnabled);
2928
+ const loadSideBarContent = async (extensionId, extensionVersion, extensionUri, isBuiltin) => {
2929
+ const folderSize = await getFolderSize(extensionUri);
2930
+ const displaySize = getDisplaySize(folderSize);
2931
+ const installationEntries = getInstallationEntries(displaySize, extensionId, extensionVersion, extensionUri);
2932
+ const marketplaceEntries = getMarketplaceEntries(isBuiltin);
2933
+ const categories = getCategories();
2934
+ const resources = getResources(isBuiltin);
2887
2935
  return {
2888
- badge,
2889
- description,
2890
- extension,
2891
- extensionId,
2892
- extensionUri,
2893
- extensionVersion,
2894
- hasColorTheme,
2895
- iconSrc,
2896
- name
2936
+ installationEntries,
2937
+ marketplaceEntries,
2938
+ displaySize,
2939
+ categories,
2940
+ resources,
2941
+ folderSize
2897
2942
  };
2898
2943
  };
2899
2944
 
@@ -2959,7 +3004,11 @@ const loadContent = async (state, platform, savedState) => {
2959
3004
  iconSrc,
2960
3005
  name
2961
3006
  } = headerData;
2962
- const readmeContent = await loadReadmeContent(extension.path);
3007
+ const readmeUrl = join(extension.path, 'README.md');
3008
+ join(extension.path, 'CHANGELOG.md');
3009
+ const hasReadme = await existsFile();
3010
+ const hasChangelog = await existsFile();
3011
+ const readmeContent = await loadReadmeContent(readmeUrl);
2963
3012
  const baseUrl = getBaseUrl(extension.path, platform);
2964
3013
  const readmeHtml = await renderMarkdown(readmeContent, {
2965
3014
  baseUrl
@@ -2979,17 +3028,17 @@ const loadContent = async (state, platform, savedState) => {
2979
3028
  } = restoreState(savedState);
2980
3029
  const features = getFeatures(selectedFeature || Theme, extension);
2981
3030
  const hasFeatures = features.length > 0;
2982
- const hasReadme = true; // TODO
2983
- const hasChangelog = true; // TODO
2984
3031
  const tabs = getTabs(selectedTab, hasReadme, hasFeatures, hasChangelog);
2985
3032
  const enabledTabs = tabs.filter(tab => tab.enabled);
2986
- const folderSize = await getFolderSize(extensionUri);
2987
- const displaySize = getDisplaySize(folderSize);
2988
- const installationEntries = getInstallationEntries(displaySize, extensionId, extensionVersion, extensionUri);
2989
- const marketplaceEntries = getMarketplaceEntries(isBuiltin);
2990
- const categories = getCategories();
2991
- const resources = getResources(isBuiltin);
2992
3033
  const sizeValue = getViewletSize(width || 0);
3034
+ const {
3035
+ installationEntries,
3036
+ marketplaceEntries,
3037
+ displaySize,
3038
+ categories,
3039
+ resources,
3040
+ folderSize
3041
+ } = await loadSideBarContent(extensionId, extensionVersion, extensionUri, isBuiltin);
2993
3042
  return {
2994
3043
  ...state,
2995
3044
  badge,
@@ -3010,10 +3059,11 @@ const loadContent = async (state, platform, savedState) => {
3010
3059
  iconSrc,
3011
3060
  name,
3012
3061
  readmeScrollTop,
3062
+ readmeUrl,
3013
3063
  resources,
3064
+ scrollSource: Script,
3014
3065
  scrollToTopButtonEnabled: true,
3015
3066
  secondEntries: marketplaceEntries,
3016
- scrollSource: Script,
3017
3067
  selectedTab,
3018
3068
  sizeOnDisk: size,
3019
3069
  sizeValue,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-detail-view",
3
- "version": "3.40.0",
3
+ "version": "3.41.0",
4
4
  "description": "Extension Detail View Worker",
5
5
  "license": "MIT",
6
6
  "author": "Lvce Editor",