@lvce-editor/extension-detail-view 3.1.0 → 3.2.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.
@@ -850,150 +850,174 @@ const ExtensionDetail = 'ExtensionDetail';
850
850
  const ExtensionDetailDescription = 'ExtensionDetailDescription';
851
851
  const ExtensionDetailHeader = 'ExtensionDetailHeader';
852
852
  const ExtensionDetailHeaderDetails = 'ExtensionDetailHeaderDetails';
853
+ const Changelog$1 = 'Changelog';
854
+ const Features$1 = 'Features';
853
855
  const ExtensionDetailIcon = 'ExtensionDetailIcon';
854
856
  const ExtensionDetailName = 'ExtensionDetailName';
857
+ const ExtensionDetailTab = 'ExtensionDetailTab';
858
+ const ExtensionDetailTabs = 'ExtensionDetailTabs';
859
+ const ExtensionDetailTabSelected = 'ExtensionDetailTabSelected';
855
860
  const Markdown = 'Markdown';
856
861
  const Viewlet = 'Viewlet';
857
862
 
863
+ const Button = 1;
864
+ const Div$1 = 4;
865
+ const H1$1 = 5;
866
+ const Span$1 = 8;
867
+ const Text$1 = 12;
868
+ const Img$1 = 17;
869
+ const H2$1 = 22;
870
+ const H3$1 = 23;
871
+ const H4$1 = 24;
872
+ const H5$1 = 25;
873
+ const Article$1 = 27;
874
+ const Aside$1 = 28;
875
+ const Footer$1 = 29;
876
+ const Header$1 = 30;
877
+ const Nav$1 = 40;
878
+ const Section$1 = 41;
879
+ const Search$1 = 42;
880
+ const Dd$1 = 43;
881
+ const Dl$1 = 44;
882
+ const Figcaption$1 = 45;
883
+ const Figure$1 = 46;
884
+ const Hr$1 = 47;
885
+ const Li$1 = 48;
886
+ const Ol$1 = 49;
887
+ const P$1 = 50;
888
+ const Pre$1 = 51;
889
+ const A$1 = 53;
890
+ const Abbr$1 = 54;
891
+ const Br$1 = 55;
892
+ const Cite$1 = 56;
893
+ const Data$1 = 57;
894
+ const Time$1 = 58;
895
+ const Tfoot$1 = 59;
896
+
897
+ const text = data => {
898
+ return {
899
+ type: Text$1,
900
+ text: data,
901
+ childCount: 0
902
+ };
903
+ };
904
+
905
+ const getChangelogVirtualDom = () => {
906
+ // TODO set tabpanel role
907
+ return [{
908
+ type: Div$1,
909
+ className: Changelog$1,
910
+ childCount: 1
911
+ }, text('Not Implemented')];
912
+ };
913
+
858
914
  const Document = 'document';
859
915
  const TabList = 'tablist';
860
916
  const Tab = 'tab';
861
917
 
862
918
  const HandleReadmeContextMenu = 'handleReadmeContextMenu';
919
+ const HandleTabsClick = 'handleTabsClick';
863
920
 
864
921
  const allowedMarkdownAttributes = ['src', 'id', 'className', 'title', 'alt', 'href', 'target', 'rel'];
865
922
 
866
- const Div$1 = 'div';
867
- const H1$1 = 'h1';
868
- const H2$1 = 'h2';
869
- const H3$1 = 'h3';
870
- const H4$1 = 'h4';
871
- const H5$1 = 'h5';
872
- const Img$1 = 'img';
873
- const Span$1 = 'span';
874
- const Article$1 = 'article';
875
- const Aside$1 = 'aside';
876
- const Footer$1 = 'footer';
877
- const Header$1 = 'header';
878
- const Nav$1 = 'nav';
879
- const Section$1 = 'section';
880
- const Search$1 = 'search';
881
- const Dd$1 = 'dd';
882
- const Dl$1 = 'dl';
883
- const Figcaption$1 = 'figcaption';
884
- const Figure$1 = 'figure';
885
- const Hr$1 = 'hr';
886
- const Li$1 = 'li';
887
- const Ol$1 = 'ol';
888
- const P$1 = 'p';
889
- const Pre$1 = 'pre';
890
- const A$1 = 'a';
891
- const Abbr$1 = 'abbr';
892
- const Br$1 = 'br';
893
- const Cite$1 = 'cite';
894
- const Data$1 = 'data';
895
- const Time$1 = 'time';
896
- const Tfoot$1 = 'tfoot';
897
-
898
- const Div = 4;
899
- const H1 = 5;
900
- const Span = 8;
901
- const Text$1 = 12;
902
- const Img = 17;
903
- const H2 = 22;
904
- const H3 = 23;
905
- const H4 = 24;
906
- const H5 = 25;
907
- const Article = 27;
908
- const Aside = 28;
909
- const Footer = 29;
910
- const Header = 30;
911
- const Nav = 40;
912
- const Section = 41;
913
- const Search = 42;
914
- const Dd = 43;
915
- const Dl = 44;
916
- const Figcaption = 45;
917
- const Figure = 46;
918
- const Hr = 47;
919
- const Li = 48;
920
- const Ol = 49;
921
- const P = 50;
922
- const Pre = 51;
923
- const A = 53;
924
- const Abbr = 54;
925
- const Br = 55;
926
- const Cite = 56;
927
- const Data = 57;
928
- const Time = 58;
929
- const Tfoot = 59;
923
+ const Div = 'div';
924
+ const H1 = 'h1';
925
+ const H2 = 'h2';
926
+ const H3 = 'h3';
927
+ const H4 = 'h4';
928
+ const H5 = 'h5';
929
+ const Img = 'img';
930
+ const Span = 'span';
931
+ const Article = 'article';
932
+ const Aside = 'aside';
933
+ const Footer = 'footer';
934
+ const Header = 'header';
935
+ const Nav = 'nav';
936
+ const Section = 'section';
937
+ const Search = 'search';
938
+ const Dd = 'dd';
939
+ const Dl = 'dl';
940
+ const Figcaption = 'figcaption';
941
+ const Figure = 'figure';
942
+ const Hr = 'hr';
943
+ const Li = 'li';
944
+ const Ol = 'ol';
945
+ const P = 'p';
946
+ const Pre = 'pre';
947
+ const A = 'a';
948
+ const Abbr = 'abbr';
949
+ const Br = 'br';
950
+ const Cite = 'cite';
951
+ const Data = 'data';
952
+ const Time = 'time';
953
+ const Tfoot = 'tfoot';
930
954
 
931
955
  const getVirtualDomTag = text => {
932
956
  switch (text) {
933
- case H1$1:
934
- return H1;
935
- case H2$1:
936
- return H2;
937
- case H3$1:
938
- return H3;
939
- case H4$1:
940
- return H4;
941
- case H5$1:
942
- return H5;
943
- case Div$1:
944
- return Div;
945
- case Article$1:
946
- return Article;
947
- case Aside$1:
948
- return Aside;
949
- case Footer$1:
950
- return Footer;
951
- case Header$1:
952
- return Header;
953
- case Nav$1:
954
- return Nav;
955
- case Section$1:
956
- return Section;
957
- case Search$1:
958
- return Search;
959
- case Dd$1:
960
- return Dd;
961
- case Dl$1:
962
- return Dl;
963
- case Figcaption$1:
964
- return Figcaption;
965
- case Figure$1:
966
- return Figure;
967
- case Hr$1:
968
- return Hr;
969
- case Li$1:
970
- return Li;
971
- case Ol$1:
972
- return Ol;
973
- case P$1:
974
- return P;
975
- case Pre$1:
976
- return Pre;
977
- case A$1:
978
- return A;
979
- case Abbr$1:
980
- return Abbr;
981
- case Br$1:
982
- return Br;
983
- case Cite$1:
984
- return Cite;
985
- case Data$1:
986
- return Data;
987
- case Time$1:
988
- return Time;
989
- case Tfoot$1:
990
- return Tfoot;
991
- case Img$1:
992
- return Img;
993
- case Span$1:
994
- return Span;
957
+ case H1:
958
+ return H1$1;
959
+ case H2:
960
+ return H2$1;
961
+ case H3:
962
+ return H3$1;
963
+ case H4:
964
+ return H4$1;
965
+ case H5:
966
+ return H5$1;
967
+ case Div:
968
+ return Div$1;
969
+ case Article:
970
+ return Article$1;
971
+ case Aside:
972
+ return Aside$1;
973
+ case Footer:
974
+ return Footer$1;
975
+ case Header:
976
+ return Header$1;
977
+ case Nav:
978
+ return Nav$1;
979
+ case Section:
980
+ return Section$1;
981
+ case Search:
982
+ return Search$1;
983
+ case Dd:
984
+ return Dd$1;
985
+ case Dl:
986
+ return Dl$1;
987
+ case Figcaption:
988
+ return Figcaption$1;
989
+ case Figure:
990
+ return Figure$1;
991
+ case Hr:
992
+ return Hr$1;
993
+ case Li:
994
+ return Li$1;
995
+ case Ol:
996
+ return Ol$1;
997
+ case P:
998
+ return P$1;
999
+ case Pre:
1000
+ return Pre$1;
1001
+ case A:
1002
+ return A$1;
1003
+ case Abbr:
1004
+ return Abbr$1;
1005
+ case Br:
1006
+ return Br$1;
1007
+ case Cite:
1008
+ return Cite$1;
1009
+ case Data:
1010
+ return Data$1;
1011
+ case Time:
1012
+ return Time$1;
1013
+ case Tfoot:
1014
+ return Tfoot$1;
1015
+ case Img:
1016
+ return Img$1;
1017
+ case Span:
1018
+ return Span$1;
995
1019
  default:
996
- return Div;
1020
+ return Div$1;
997
1021
  }
998
1022
  };
999
1023
 
@@ -1022,7 +1046,7 @@ const CommentStart = 21;
1022
1046
 
1023
1047
  const isSelfClosingTag = tag => {
1024
1048
  switch (tag) {
1025
- case Img$1:
1049
+ case Img:
1026
1050
  return true;
1027
1051
  default:
1028
1052
  return false;
@@ -1287,14 +1311,6 @@ const tokenizeHtml = text => {
1287
1311
  return tokens;
1288
1312
  };
1289
1313
 
1290
- const text = data => {
1291
- return {
1292
- type: Text$1,
1293
- text: data,
1294
- childCount: 0
1295
- };
1296
- };
1297
-
1298
1314
  const parseHtml = (html, allowedAttributes) => {
1299
1315
  string(html);
1300
1316
  array(allowedAttributes);
@@ -1364,11 +1380,11 @@ const getVirtualDomChildCount = markdownDom => {
1364
1380
  return stack.length;
1365
1381
  };
1366
1382
 
1367
- const getExtensionDetailContentVirtualDom = sanitizedReadmeHtml => {
1383
+ const getDetailsVirtualDom = sanitizedReadmeHtml => {
1368
1384
  const markdownDom = getMarkdownVirtualDom(sanitizedReadmeHtml);
1369
1385
  const childCount = getVirtualDomChildCount(markdownDom);
1370
1386
  const dom = [{
1371
- type: Div,
1387
+ type: Div$1,
1372
1388
  className: Markdown,
1373
1389
  role: Document,
1374
1390
  onContextMenu: HandleReadmeContextMenu,
@@ -1377,6 +1393,32 @@ const getExtensionDetailContentVirtualDom = sanitizedReadmeHtml => {
1377
1393
  return dom;
1378
1394
  };
1379
1395
 
1396
+ const getFeaturesVirtualDom = () => {
1397
+ // TODO set tabpanel role
1398
+ return [{
1399
+ type: Div$1,
1400
+ className: Features$1,
1401
+ childCount: 1
1402
+ }, text('Not Implemented')];
1403
+ };
1404
+
1405
+ const Details = 'Details';
1406
+ const Features = 'Features';
1407
+ const Changelog = 'Changelog';
1408
+
1409
+ const getExtensionDetailContentVirtualDom = (sanitizedReadmeHtml, selectedTab) => {
1410
+ switch (selectedTab) {
1411
+ case Details:
1412
+ return getDetailsVirtualDom(sanitizedReadmeHtml);
1413
+ case Features:
1414
+ return getFeaturesVirtualDom();
1415
+ case Changelog:
1416
+ return getChangelogVirtualDom();
1417
+ default:
1418
+ return [];
1419
+ }
1420
+ };
1421
+
1380
1422
  const getExtensionDetailHeaderVirtualDom = extensionDetail => {
1381
1423
  const {
1382
1424
  name,
@@ -1384,79 +1426,92 @@ const getExtensionDetailHeaderVirtualDom = extensionDetail => {
1384
1426
  description
1385
1427
  } = extensionDetail;
1386
1428
  const dom = [{
1387
- type: Div,
1429
+ type: Div$1,
1388
1430
  className: ExtensionDetailHeader,
1389
1431
  childCount: 2
1390
1432
  }, {
1391
- type: Img,
1433
+ type: Img$1,
1392
1434
  className: ExtensionDetailIcon,
1393
1435
  alt: '',
1394
1436
  draggable: false,
1395
1437
  childCount: 0,
1396
1438
  src: iconSrc
1397
1439
  }, {
1398
- type: Div,
1440
+ type: Div$1,
1399
1441
  className: ExtensionDetailHeaderDetails,
1400
1442
  childCount: 2
1401
1443
  }, {
1402
- type: Div,
1444
+ type: Div$1,
1403
1445
  className: ExtensionDetailName,
1404
1446
  childCount: 1
1405
1447
  }, text(name), {
1406
- type: Div,
1448
+ type: Div$1,
1407
1449
  className: ExtensionDetailDescription,
1408
1450
  childCount: 1
1409
1451
  }, text(description)];
1410
1452
  return dom;
1411
1453
  };
1412
1454
 
1455
+ const getTabs = selectedTab => {
1456
+ const tabs = [{
1457
+ label: 'Details',
1458
+ name: Details,
1459
+ selected: selectedTab === Details
1460
+ }, {
1461
+ label: 'Features',
1462
+ name: Features,
1463
+ selected: selectedTab === Features
1464
+ }, {
1465
+ label: 'Changelog',
1466
+ name: Changelog,
1467
+ selected: selectedTab === Changelog
1468
+ }];
1469
+ return tabs;
1470
+ };
1471
+
1472
+ const joinBySpace = (...items) => {
1473
+ return items.join(' ');
1474
+ };
1475
+
1476
+ const mergeClassNames = (...classNames) => {
1477
+ return joinBySpace(...classNames.filter(Boolean));
1478
+ };
1479
+
1413
1480
  const getTabVirtualDom = tab => {
1414
1481
  const {
1415
1482
  label,
1416
- selected
1483
+ selected,
1484
+ name
1417
1485
  } = tab;
1418
- const className = selected ? 'ExtensionDetailTab ExtensionDetailTabSelected' : 'ExtensionDetailTab';
1486
+ const className = selected ? mergeClassNames(ExtensionDetailTab, ExtensionDetailTabSelected) : ExtensionDetailTab;
1419
1487
  return [{
1420
- type: Div,
1488
+ type: Button,
1421
1489
  role: Tab,
1490
+ name,
1422
1491
  className,
1423
- childCount: 1
1492
+ childCount: 1,
1493
+ tabIndex: -1
1424
1494
  }, text(label)];
1425
1495
  };
1426
1496
 
1427
1497
  const getTabsVirtualDom = tabs => {
1428
1498
  return [{
1429
- type: Div,
1430
- className: 'ExtensionDetailTabs',
1499
+ type: Div$1,
1500
+ className: ExtensionDetailTabs,
1431
1501
  childCount: tabs.length,
1432
- role: TabList
1502
+ role: TabList,
1503
+ onClick: HandleTabsClick,
1504
+ tabIndex: 0
1433
1505
  }, ...tabs.flatMap(getTabVirtualDom)];
1434
1506
  };
1435
1507
 
1436
- const joinBySpace = (...items) => {
1437
- return items.join(' ');
1438
- };
1439
-
1440
- const mergeClassNames = (...classNames) => {
1441
- return joinBySpace(...classNames.filter(Boolean));
1442
- };
1443
-
1444
- const getExtensionDetailVirtualDom = (extensionDetail, sanitizedReadmeHtml) => {
1445
- const tabs = [{
1446
- label: 'Details',
1447
- selected: true
1448
- }, {
1449
- label: 'Features',
1450
- selected: false
1451
- }, {
1452
- label: 'Changelog',
1453
- selected: false
1454
- }];
1508
+ const getExtensionDetailVirtualDom = (extensionDetail, sanitizedReadmeHtml, selectedTab) => {
1509
+ const tabs = getTabs(selectedTab);
1455
1510
  const dom = [{
1456
- type: Div,
1511
+ type: Div$1,
1457
1512
  className: mergeClassNames(Viewlet, ExtensionDetail),
1458
1513
  childCount: 3
1459
- }, ...getExtensionDetailHeaderVirtualDom(extensionDetail), ...getTabsVirtualDom(tabs), ...getExtensionDetailContentVirtualDom(sanitizedReadmeHtml)];
1514
+ }, ...getExtensionDetailHeaderVirtualDom(extensionDetail), ...getTabsVirtualDom(tabs), ...getExtensionDetailContentVirtualDom(sanitizedReadmeHtml, selectedTab)];
1460
1515
  return dom;
1461
1516
  };
1462
1517
 
@@ -4198,8 +4253,10 @@ const loadContent = async (state, platform) => {
4198
4253
  const description = getDescription(extension);
4199
4254
  const name = getName(extension);
4200
4255
  const size = getViewletSize(width);
4256
+ const selectedTab = Details;
4201
4257
  return {
4202
4258
  ...state,
4259
+ selectedTab,
4203
4260
  sanitizedReadmeHtml: normalizedReadmeHtml,
4204
4261
  iconSrc,
4205
4262
  name,
@@ -4208,6 +4265,14 @@ const loadContent = async (state, platform) => {
4208
4265
  };
4209
4266
  };
4210
4267
 
4268
+ const handleTabsClick = (state, name) => {
4269
+ // TODO load the tabs content if needed
4270
+ return {
4271
+ ...state,
4272
+ selectedTab: name
4273
+ };
4274
+ };
4275
+
4211
4276
  const terminate = () => {
4212
4277
  globalThis.close();
4213
4278
  };
@@ -4217,6 +4282,9 @@ const commandMap = {
4217
4282
  'ExtensionDetail.getVirtualDom': getExtensionDetailVirtualDom,
4218
4283
  'ExtensionDetail.loadContent': loadContent,
4219
4284
  'ExtensionDetail.terminate': terminate,
4285
+ 'ExtensionDetail.handleTabsClick': handleTabsClick,
4286
+ 'ExtensionDetail.handleIconError': handleIconError,
4287
+ // deprecated
4220
4288
  'HandleIconError.handleIconError': handleIconError,
4221
4289
  'RenderMarkdown.renderMarkdown': renderMarkdown
4222
4290
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-detail-view",
3
- "version": "3.1.0",
3
+ "version": "3.2.0",
4
4
  "description": "Extension Detail View Worker",
5
5
  "main": "dist/extensionDetailViewWorkerMain.js",
6
6
  "type": "module",