@ca-plant-list/ca-plant-list 0.2.18 → 0.3.1

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.
Files changed (35) hide show
  1. package/data/exceptions.json +83 -68
  2. package/data/illustrations/inkscape/asteraceae_floret.svg +125 -83
  3. package/data/illustrations/inkscape/peduncle.svg +38 -34
  4. package/data/synonyms.csv +20 -20
  5. package/data/taxa.csv +11 -14
  6. package/ebook/css/main.css +3 -6
  7. package/jekyll/_layouts/default.html +56 -0
  8. package/jekyll/_layouts/html.html +5 -56
  9. package/jekyll/assets/css/main.css +5 -0
  10. package/lib/basepagerenderer.js +7 -3
  11. package/lib/commandandtaxaprocessor.js +3 -0
  12. package/lib/ebook/ebooksitegenerator.js +34 -0
  13. package/lib/ebook/glossarypages.js +6 -67
  14. package/lib/ebook/images.js +10 -8
  15. package/lib/ebook/pages/taxonpage.js +5 -1
  16. package/lib/ebook/pages/tocpage.js +2 -2
  17. package/lib/ebook/plantbook.js +12 -9
  18. package/lib/errorlog.js +4 -0
  19. package/lib/files.js +5 -0
  20. package/lib/index.d.ts +17 -2
  21. package/lib/jekyll.js +13 -1
  22. package/lib/sitegenerator.js +79 -0
  23. package/lib/taxa.js +30 -7
  24. package/lib/taxaprocessor.js +1 -1
  25. package/lib/web/glossarypages.js +23 -18
  26. package/package.json +3 -2
  27. package/data/illustrations/optimized/asteraceae_floret.svg +0 -28
  28. package/data/illustrations/optimized/f-blue.svg +0 -11
  29. package/data/illustrations/optimized/f-orange.svg +0 -11
  30. package/data/illustrations/optimized/f-pink.svg +0 -11
  31. package/data/illustrations/optimized/f-red.svg +0 -11
  32. package/data/illustrations/optimized/f-white.svg +0 -11
  33. package/data/illustrations/optimized/f-yellow.svg +0 -11
  34. package/data/illustrations/optimized/peduncle.svg +0 -21
  35. package/jekyll/glossary.md +0 -5
package/data/synonyms.csv CHANGED
@@ -25,7 +25,7 @@ Achnatherum lemmonii subsp. lemmonii,Stipa lemmonii var. lemmonii
25
25
  Acmispon strigosus var. hirtellus,Acmispon strigosus
26
26
  Acroptilon repens,Rhaponticum repens
27
27
  Actaea rubra subsp. arguta,Actaea rubra
28
- Adelinia grande,Adelinia grandis,INAT
28
+ Adelinia grandis,Adelinia grandis,INAT
29
29
  Adiantum boreale,Adiantum aleuticum
30
30
  Adiantum pedatum subsp. calderi,Adiantum aleuticum
31
31
  Adiantum pedatum var. aleuticum,Adiantum aleuticum
@@ -461,6 +461,7 @@ Cordylanthus rigidus var. ferrisianus,Cordylanthus rigidus subsp. rigidus
461
461
  Coreopsis calliopsidea,Leptosyne calliopsidea
462
462
  Coreopsis hamiltonii,Leptosyne hamiltonii
463
463
  Coreopsis stillmanii,Leptosyne stillmanii
464
+ Corethrogyne filaginifolia var. californica,Corethrogyne filaginifolia
464
465
  Cornus ×californica,Cornus sericea subsp. sericea
465
466
  Cornus californica var. nevadensis,Cornus sericea subsp. sericea
466
467
  Cornus californica,Cornus sericea subsp. sericea
@@ -831,6 +832,8 @@ Heracleum lanatum,Heracleum maximum
831
832
  Herniaria cinerea,Herniaria hirsuta var. cinerea,INAT
832
833
  Herniaria hirsuta subsp. cinerea,Herniaria hirsuta var. cinerea
833
834
  Herpestris pilosa,Mimetanthe pilosa
835
+ Hesperocyparis macrocarpa,Hesperocyparis macrocarpa,INAT
836
+ Hesperocyparis sargentii,Hesperocyparis sargentii,INAT
834
837
  Hesperomecon filiformis,Hesperomecon linearis
835
838
  Hesperoscordum hyacinthinum,Triteleia hyacinthina
836
839
  Hesperoscordum lacteum,Triteleia hyacinthina
@@ -904,6 +907,8 @@ Iva axillaris var. robustior,Iva axillaris
904
907
  Jacobaea vulgaris,Senecio jacobaea,INAT
905
908
  Johnstonella micromeres,Cryptantha micromeres,INAT
906
909
  Juglans californica var. californica,Juglans californica
910
+ Juncoides comosa var. subsessilis,Luzula subsessilis
911
+ Juncoides subsessilis,Luzula subsessilis
907
912
  Juncus amuricus,Juncus bufonius var. occidentalis,INAT
908
913
  Juncus arcticus var. balticus,Juncus balticus subsp. ater
909
914
  Juncus arcticus var. mexicanus,Juncus mexicanus
@@ -973,7 +978,6 @@ Leptosiphon luteus,Leptosiphon parviflorus
973
978
  Leptosiphon micranthus,Leptosiphon parviflorus
974
979
  Leptotaenia californica,Lomatium californicum
975
980
  Lepturus cylindricus,Hainardia cylindrica
976
- Lessingia filaginifolia var. californica,Corethrogyne filaginifolia
977
981
  Lessingia filaginifolia var. filaginifolia,Corethrogyne filaginifolia
978
982
  Lessingia germanorum var. parvula,Lessingia tenuis
979
983
  Lessingia germanorum var. tenuis,Lessingia tenuis
@@ -1083,8 +1087,6 @@ Lupinus subvexus var. transmontanus,Lupinus microcarpus var. microcarpus
1083
1087
  Lupinus subvexus,Lupinus microcarpus var. microcarpus
1084
1088
  Lupinus vallicola,Lupinus nanus
1085
1089
  Lupinus variicolor,Lupinus littoralis var. variicolor
1086
- Luzula comosa var. congesta,Luzula comosa var. comosa
1087
- Luzula comosa var. macrantha,Luzula subsessilis
1088
1090
  Luzula comosa var. subsessilis,Luzula subsessilis
1089
1091
  Lythrum alatum var. linearifolium,Lythrum californicum
1090
1092
  Lythrum sanfordii,Lythrum californicum
@@ -1102,13 +1104,12 @@ Mahonia nervosa var. mendocinensis,Berberis nervosa
1102
1104
  Mahonia pinnata subsp. pinnata,Berberis pinnata subsp. pinnata
1103
1105
  Maianthemum racemosum subsp. amplexicaule,Maianthemum racemosum
1104
1106
  Malacothamnus arcuatus var. elmeri,Malacothamnus hallii,INAT
1105
- Malacothamnus fremontii subsp. cercophorus,Malacothamnus fremontii
1106
- Malacothamnus helleri,Malacothamnus fremontii
1107
- Malacothamnus howellii,Malacothamnus fremontii
1107
+ Malacothamnus hallii,Malacothamnus arcuatus var. elmeri
1108
1108
  Malacothrix coulteri var. cognata,Malacothrix coulteri
1109
1109
  Malacothrix senecioides,Malacothrix clevelandii
1110
1110
  Malva pseudolavatera,Malva multiflora
1111
1111
  Malvastrum exilis,Eremalche exilis
1112
+ Malvastrum hallii,Malacothamnus arcuatus var. elmeri
1112
1113
  Marah fabacea var. agrestis,Marah fabacea
1113
1114
  Maruta cotula,Anthemis cotula
1114
1115
  Meconella linearis,Hesperomecon linearis
@@ -1267,7 +1268,6 @@ Myosurus minimus subsp. major,Myosurus minimus
1267
1268
  Myosurus minimus var. filiformis,Myosurus minimus
1268
1269
  Myosurus minimus var. major,Myosurus minimus
1269
1270
  Myosurus minimus var. sessiliflorus,Myosurus sessilis
1270
- Myosurus minimus,Myosurus minimus subsp. minimus,INAT
1271
1271
  Myrica californica,Morella californica
1272
1272
  Myriophyllum brasiliense,Myriophyllum aquaticum
1273
1273
  Myriophyllum exalbescens,Myriophyllum sibiricum
@@ -1352,8 +1352,6 @@ Parvisedum pentandrum,Sedella pentandra
1352
1352
  Paspalum distichum var. indutum,Paspalum distichum
1353
1353
  Paspalum paspalodes,Paspalum distichum
1354
1354
  Pectocarya pusilla,Gruvelia pusilla,INAT
1355
- Pedicularis aurantiaca,Pedicularis densiflora
1356
- Pedicularis densiflora subsp. aurantiaca,Pedicularis densiflora
1357
1355
  Penstemon heterophyllus subsp. heterophyllus,Penstemon heterophyllus var. heterophyllus
1358
1356
  Penstemon heterophyllus subsp. purdyi,Penstemon heterophyllus var. purdyi
1359
1357
  Pentagramma triangularis subsp. semipallida,Pentagramma triangularis
@@ -1828,6 +1826,7 @@ Spergularia bocconei,Spergularia bocconi,INAT
1828
1826
  Spergularia marina var. tenuis,Spergularia marina
1829
1827
  Spergularia maritima,Spergularia media var. media
1830
1828
  Spergularia salina,Spergularia marina
1829
+ Sphaeralcea fasciculata var. elmeri,Malacothamnus arcuatus var. elmeri
1831
1830
  Spirodela oligorrhiza,Landoltia punctata
1832
1831
  Spirodela punctata,Landoltia punctata
1833
1832
  Sporobolus alterniflorus,Spartina alterniflora,INAT
@@ -1859,9 +1858,7 @@ Streptanthus albidus subsp. peramoenus,Streptanthus glandulosus subsp. glandulos
1859
1858
  Streptanthus breweri var. breweri,Streptanthus breweri
1860
1859
  Streptanthus coulteri var. lemmonii,Caulanthus lemmonii
1861
1860
  Streptanthus flavescens,Caulanthus flavescens
1862
- Streptanthus glandulosus subsp. arkii,Streptanthus glandulosus subsp. glandulosus
1863
1861
  Streptanthus glandulosus subsp. glandulosus,Streptanthus albidus subsp. peramoenus,INAT
1864
- Streptanthus glandulosus subsp. raichei,Streptanthus glandulosus subsp. glandulosus
1865
1862
  Streptanthus lemmonii,Caulanthus lemmonii
1866
1863
  Stropholirion californicum,Dichelostemma volubile
1867
1864
  Stylocline amphibola,Micropus amphibolus
@@ -1914,30 +1911,33 @@ Toxicodendron trilobatum,Rhus aromatica
1914
1911
  Trientalis borealis subsp. latifolia,Lysimachia latifolia
1915
1912
  Trientalis latifolia,Lysimachia latifolia
1916
1913
  Trifolium albopurpureum var. albopurpureum,Trifolium albopurpureum
1914
+ Trifolium albopurpureum var. columbinum,Trifolium columbinum
1917
1915
  Trifolium albopurpureum var. dichotomum,Trifolium dichotomum
1918
1916
  Trifolium albopurpureum var. olivaceum,Trifolium columbinum
1919
1917
  Trifolium amplectens var. hydrophilum,Trifolium hydrophilum
1920
1918
  Trifolium amplectens var. truncatum,Trifolium depauperatum var. truncatum
1921
- Trifolium appendiculatum var. appendiculatum,Trifolium variegatum var. major
1922
- Trifolium appendiculatum var. rostratum,Trifolium variegatum var. variegatum
1919
+ Trifolium appendiculatum var. rostratum,Trifolium variegatum
1923
1920
  Trifolium barbigerum var. andrewsii,Trifolium grayi
1924
1921
  Trifolium barbigerum var. barbigerum,Trifolium barbigerum
1922
+ Trifolium bifidum var. bifidum,Trifolium bifidum
1923
+ Trifolium bifidum var. decipiens,Trifolium bifidum
1925
1924
  Trifolium depauperatum var. hydrophilum,Trifolium hydrophilum
1926
1925
  Trifolium fucatum var. gambelii,Trifolium fucatum
1927
1926
  Trifolium fucatum var. virescens,Trifolium fucatum
1928
- Trifolium geminiflorum,Trifolium variegatum var. geminiflorum
1927
+ Trifolium geminiflorum,Trifolium variegatum
1929
1928
  Trifolium gracilentum var. gracilentum,Trifolium gracilentum
1930
1929
  Trifolium gracilentum var. inconspicuum,Trifolium gracilentum
1931
1930
  Trifolium microdon var. pilosum,Trifolium microdon
1932
1931
  Trifolium minutissimum,Trifolium barbigerum
1933
1932
  Trifolium olivaceum,Trifolium columbinum,INAT
1934
- Trifolium pauciflorum,Trifolium variegatum var. variegatum
1933
+ Trifolium pauciflorum,Trifolium variegatum
1935
1934
  Trifolium procumbens,Trifolium campestre
1936
1935
  Trifolium tomentosum var. tomentosum,Trifolium tomentosum
1937
1936
  Trifolium tridentatum var. aciculare,Trifolium willdenovii
1938
1937
  Trifolium tridentatum,Trifolium willdenovii
1939
- Trifolium variegatum var. melananthum,Trifolium variegatum var. major
1940
- Trifolium variegatum var. trilobatum,Trifolium variegatum var. variegatum
1938
+ Trifolium variegatum var. geminiflorum,Trifolium variegatum
1939
+ Trifolium variegatum var. pauciflorum,Trifolium variegatum
1940
+ Trifolium variegatum var. trilobatum,Trifolium variegatum
1941
1941
  Trillium chloropetalum var. giganteum,Trillium chloropetalum
1942
1942
  Trisetum cernuum var. canescens,Trisetum canescens
1943
1943
  Triteleia angustiflora,Triteleia laxa
@@ -2000,8 +2000,8 @@ Vulpia myuros var. myuros,Festuca myuros
2000
2000
  Vulpia octoflora var. hirtella,Festuca octoflora
2001
2001
  Vulpia octoflora,Festuca octoflora
2002
2002
  Woodwardia chamissoi,Woodwardia fimbriata
2003
- Xanthium strumarium var. canadense,Xanthium strumarium
2004
- Xanthium strumarium var. glabratum,Xanthium strumarium
2003
+ Xanthium strumarium var. canadense,Xanthium orientale
2004
+ Xanthium strumarium var. glabratum,Xanthium orientale
2005
2005
  Xerobotrys glaucus,Arctostaphylos glauca
2006
2006
  Zauschneria californica subsp. californica,Epilobium canum subsp. canum
2007
2007
  Zauschneria cana,Epilobium canum subsp. canum
package/data/taxa.csv CHANGED
@@ -27,7 +27,7 @@ Acmispon parviflorus,least trefoil,N,91717,11299,57048
27
27
  Acmispon strigosus,,N,91722,11305,58152
28
28
  Acmispon wrangelianus,common trefoil,N,82483,11306,57050
29
29
  Actaea rubra,baneberry,N,11894,93,49870
30
- Adelinia grandis,hound's tongue,N,101954,14544,769151,blue
30
+ Adelinia grandis,hound's tongue,N,101954,14544,1520640,blue
31
31
  Adenocaulon bicolor,American trailplant,N,721,94,56854
32
32
  Adenostoma fasciculatum,chamise,N,11939,97,47146
33
33
  Adiantum aleuticum,five-finger fern,N,11945,100,52667
@@ -201,7 +201,7 @@ Balsamorhiza deltoidea,,N,1634,1047,70383
201
201
  Balsamorhiza macrolepis,,N,1639,1051,69665,,,,350,1B.2,,,S2,G2
202
202
  Barbarea orthoceras,winter cress,N,15481,1057,52976
203
203
  Bassia hyssopifolia,,X,15511,1060,58125
204
- Bellardia trixago,,X,15566,1064,51286
204
+ Bellardia trixago var. trixago,,X,8635,14706,1115038
205
205
  Bellis perennis,English daisy,X,1652,1065,55563
206
206
  Berberis aquifolium var. aquifolium,,N,71483,1068,126887
207
207
  Berberis aquifolium var. dictyota,,N,76967,1069,775436
@@ -846,8 +846,8 @@ Hesperevax acaulis var. ambusticola,fire evax,N,59934,4108,80930
846
846
  Hesperevax caulescens,hogwallow starfish,N,28021,4110,60135,,,,1931,4.2,,,S3,G3
847
847
  Hesperevax sparsiflora var. sparsiflora,,N,59937,4113,61172
848
848
  Hesperocnide tenella,black haired nettle,N,28033,4118,59036
849
- Hesperocyparis macrocarpa,Monterey cypress,N,89298,11190,322545,,,,536,1B.2,,,S1,G1
850
- Hesperocyparis sargentii,Sargent cypress,N,89302,10803,83149
849
+ Hesperocyparis macrocarpa,Monterey cypress,N,89298,11190,77378,,,,536,1B.2,,,S1,G1
850
+ Hesperocyparis sargentii,Sargent cypress,N,89302,10803,77381
851
851
  Hesperolinon breweri,Brewer's dwarf flax,N,28038,4121,77385,,,,404,1B.2,,,S2,G2
852
852
  Hesperolinon californicum,California dwarf flax,N,28039,4122,77386
853
853
  Hesperolinon clevelandii,,N,28040,4123,77387
@@ -1103,8 +1103,9 @@ Madia radiata,showy madia,N,4053,5296,77924,,,,1054,1B.1,,,S3,G3
1103
1103
  Madia sativa,coast tarweed,N,4055,5298,53143,yellow
1104
1104
  Maianthemum racemosum,false Solomon's seal,N,32495,10096,51062
1105
1105
  Maianthemum stellatum,,N,32497,9629,53268
1106
+ Malacothamnus arcuatus var. elmeri,,N,108345,14681,1497404
1106
1107
  Malacothamnus fremontii,white-coat mallow,N,32524,5312,70397
1107
- Malacothamnus hallii,Hall's bush mallow,N,32519,5314,1497404,,,,1065,1B.2,,,S2,G2
1108
+ Malacothamnus hallii,,N,108345,14681,1497404,,,,1065,1B.2,,,S2,G2
1108
1109
  Malacothrix californica,,N,4059,5325,58026
1109
1110
  Malacothrix clevelandii,Cleveland's malacothrix,N,4060,5326,58841
1110
1111
  Malacothrix coulteri,snake's-head,N,4061,5327,58027
@@ -1145,7 +1146,7 @@ Mentha spicata,spearmint,X,33209,10111,62652
1145
1146
  Mentha suaveolens,pineapple mint,X,33212,5417,77993
1146
1147
  Mentzelia affinis,,N,33219,5418,58194
1147
1148
  Mentzelia dispersa,,N,33236,5423,58196
1148
- Mentzelia laevicaulis,blazingstar,N,33250,5431,62308
1149
+ Mentzelia laevicaulis var. laevicaulis,blazingstar,N,61864,14741,241687
1149
1150
  Mentzelia lindleyi,,N,33255,5432,53923
1150
1151
  Mentzelia micrantha,,N,33259,5433,58933
1151
1152
  Mentzelia pectinata,,N,33274,5439,58198
@@ -1186,7 +1187,6 @@ Myosotis discolor,,X,34209,5721,70265
1186
1187
  Myosotis latifolia,forget-me-not,X,34211,5722,49132
1187
1188
  Myosotis laxa,,N,34212,5723,78150
1188
1189
  Myosurus minimus subsp. apus,little mousetail,N,,5731,181537,,,,1159,3.1,,,S2,G5T2Q
1189
- Myosurus minimus subsp. minimus,,N,,,58306
1190
1190
  Myosurus minimus,mouse-tail,N,34224,5729,58306
1191
1191
  Myosurus sessilis,,N,34226,5732,60235
1192
1192
  Myriophyllum aquaticum,parrot's feather,X,34261,5735,60202
@@ -1378,7 +1378,7 @@ Pogogyne douglasii,,N,38936,6704,63943
1378
1378
  Pogogyne serpylloides,,N,38939,6708,57118
1379
1379
  Pogogyne zizyphoroides,,N,78298,6709,60209
1380
1380
  Polemonium carneum,royal sky pilot,N,38971,6712,78665,,,,3345,2B.2,,,S2,G3G4
1381
- Polycarpon tetraphyllum var. tetraphyllum,four-leaved allseed,X,81542,11032,81277
1381
+ Polycarpon tetraphyllum subsp. tetraphyllum,four-leaved allseed,X,80560,14756,81277
1382
1382
  Polygonum argyrocoleon,persian knotweed,X,39158,6738,78676
1383
1383
  Polygonum aviculare subsp. aviculare,,X,80990,10667,80151
1384
1384
  Polygonum aviculare subsp. depressum,,X,80993,11034,63967
@@ -1728,8 +1728,7 @@ Trichostema lanceolatum,vinegar weed,N,46991,8032,54875
1728
1728
  Trifolium albopurpureum,Indian clover,N,47029,8043,58162
1729
1729
  Trifolium angustifolium,narrowleaf clover,X,47040,8051,69939
1730
1730
  Trifolium barbigerum,bearded clover,N,47049,8054,57074
1731
- Trifolium bifidum var. bifidum,Pinole clover,N,73999,8059,61180
1732
- Trifolium bifidum var. decipiens,,N,67259,8060,57075
1731
+ Trifolium bifidum,Pinole clover,N,47053,8058,60196
1733
1732
  Trifolium campestre,hop clover,X,47059,8064,57076
1734
1733
  Trifolium ciliolatum,foothill clover,N,47063,8065,60197
1735
1734
  Trifolium columbinum,olive clover,N,47030,13577,79425
@@ -1756,9 +1755,7 @@ Trifolium pratense,red clover,X,47160,8104,51875
1756
1755
  Trifolium repens,white clover,X,47164,8105,55745
1757
1756
  Trifolium subterraneum,subterranean clover,X,47174,8106,60201
1758
1757
  Trifolium tomentosum,woolly clover,X,47177,8586,61024
1759
- Trifolium variegatum var. geminiflorum,,N,91702,12114,81436
1760
- Trifolium variegatum var. major,,N,67348,12115,81437
1761
- Trifolium variegatum var. variegatum,,N,74014,12116,81438
1758
+ Trifolium variegatum,,N,47179,8108,57080
1762
1759
  Trifolium willdenovii,tomcat clover,N,47186,8109,57081
1763
1760
  Trifolium wormskioldii,cow clover,N,47188,8110,71146
1764
1761
  Triglochin concinna var. concinna,slender arrow-grass,N,74018,8112,81439
@@ -1829,8 +1826,8 @@ Woodwardia fimbriata,giant chain fern,N,48619,8355,52685
1829
1826
  Wyethia angustifolia,narrowleaf mule-ears,N,5572,8356,56987,yellow
1830
1827
  Wyethia glabra,mules ears,N,5578,8359,56988,yellow
1831
1828
  Wyethia helenioides,woolly mules ears,N,5579,8360,50799,yellow
1829
+ Xanthium orientale,cocklebur,N,5618,14779,506262
1832
1830
  Xanthium spinosum,spiny cocklebur,X,5590,8366,58045
1833
- Xanthium strumarium,cocklebur,N,5591,8367,57920
1834
1831
  Yabea microcarpa,California hedge parsley,N,48745,8373,56847
1835
1832
  Zannichellia palustris,horned-pondweed,N,48827,8379,79546
1836
1833
  Zantedeschia aethiopica,calla-lily,X,48829,8380,56006
@@ -8,14 +8,11 @@ div.flr {
8
8
  align-items: center;
9
9
  }
10
10
 
11
- img {
12
- width: 100%;
13
- }
14
-
15
11
  img.flr {
16
12
  width: 1rem;
17
13
  }
18
14
 
19
- figure {
20
- page-break-inside: avoid;
15
+ /* Glossary */
16
+ div.glossary img {
17
+ max-height: 300px;
21
18
  }
@@ -0,0 +1,56 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+ <link href="{{site.bootstrap-prefix}}/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
8
+ <title>{{page.title}}</title>
9
+ <link href="{{site.baseurl}}/assets/css/main.css" rel="stylesheet">
10
+ </head>
11
+
12
+ <body>
13
+
14
+ <nav class="navbar navbar-expand-md">
15
+ <div class="container-xxl px-5">
16
+ <button id="hamburger" class="navbar-toggler" type="button" data-bs-toggle="collapse"
17
+ data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false"
18
+ aria-label="Toggle navigation">
19
+ <span class="navbar-toggler-icon"></span>
20
+ </button>
21
+ <a class="navbar-brand" href="{{'/' | relative_url}}">{{site.navbar-name}}</a>
22
+ <div class="collapse navbar-collapse" id="navbarSupportedContent">
23
+ <ul class="navbar-nav me-auto mb-lg-0">
24
+ <li class="nav-item">
25
+ <a class="nav-link" href="{{site.baseurl}}/index_lists.html">Plant Lists</a>
26
+ </li>
27
+ <li class="nav-item">
28
+ <a class="nav-link" href="{{site.baseurl}}/rare_plants.html">Rare Plants</a>
29
+ </li>
30
+ <li class="nav-item">
31
+ <a class="nav-link" href="{{site.baseurl}}/name_search.html">Name Search</a>
32
+ </li>
33
+ <li class="nav-item">
34
+ <a class="nav-link" href="{{site.baseurl}}/glossary.html">Glossary</a>
35
+ </li>
36
+ {%include menu_extra.html %}
37
+ </ul>
38
+ </div>
39
+ </div>
40
+ </nav>
41
+
42
+ <div class="container-xxl px-5">
43
+ {{content}}
44
+ </div>
45
+
46
+ <script src="{{site.bootstrap-prefix}}/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
47
+
48
+ {%if page.js%}
49
+ <script src="{{site.baseurl}}/assets/js/{{page.js}}" type="module"></script>{%endif%}
50
+
51
+ <script src="{{site.baseurl}}/assets/js/ui.js" type="module"></script>
52
+
53
+ {%include analytics.html%}
54
+ </body>
55
+
56
+ </html>
@@ -1,57 +1,6 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
1
+ ---
2
+ layout: default
3
+ ---
3
4
 
4
- <head>
5
- <meta charset="utf-8">
6
- <meta name="viewport" content="width=device-width, initial-scale=1">
7
- <link href="{{site.bootstrap-prefix}}/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
8
- <title>{{page.title}}</title>
9
- <link href="{{site.baseurl}}/assets/css/main.css" rel="stylesheet">
10
- </head>
11
-
12
- <body>
13
-
14
- <nav class="navbar navbar-expand-md">
15
- <div class="container-xxl px-5">
16
- <button id="hamburger" class="navbar-toggler" type="button" data-bs-toggle="collapse"
17
- data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false"
18
- aria-label="Toggle navigation">
19
- <span class="navbar-toggler-icon"></span>
20
- </button>
21
- <a class="navbar-brand" href="{{'/' | relative_url}}">{{site.navbar-name}}</a>
22
- <div class="collapse navbar-collapse" id="navbarSupportedContent">
23
- <ul class="navbar-nav me-auto mb-lg-0">
24
- <li class="nav-item">
25
- <a class="nav-link" href="{{site.baseurl}}/index_lists.html">Plant Lists</a>
26
- </li>
27
- <li class="nav-item">
28
- <a class="nav-link" href="{{site.baseurl}}/rare_plants.html">Rare Plants</a>
29
- </li>
30
- <li class="nav-item">
31
- <a class="nav-link" href="{{site.baseurl}}/name_search.html">Name Search</a>
32
- </li>
33
- <li class="nav-item">
34
- <a class="nav-link" href="{{site.baseurl}}/glossary.html">Glossary</a>
35
- </li>
36
- {%include menu_extra.html %}
37
- </ul>
38
- </div>
39
- </div>
40
- </nav>
41
-
42
- <div class="container-xxl px-5">
43
- <h1>{{page.title}}</h1>
44
- {{content}}
45
- </div>
46
-
47
- <script src="{{site.bootstrap-prefix}}/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
48
-
49
- {%if page.js%}
50
- <script src="{{site.baseurl}}/assets/js/{{page.js}}" type="module"></script>{%endif%}
51
-
52
- <script src="{{site.baseurl}}/assets/js/ui.js" type="module"></script>
53
-
54
- {%include analytics.html%}
55
- </body>
56
-
57
- </html>
5
+ <h1>{{page.title}}</h1>
6
+ {{content}}
@@ -73,6 +73,11 @@ span.rare::before {
73
73
  content: "\2606";
74
74
  }
75
75
 
76
+ /* Glossary */
77
+ div.glossary img {
78
+ max-height: 300px;
79
+ }
80
+
76
81
  /* Taxon Page */
77
82
 
78
83
  .common-names {
@@ -1,24 +1,28 @@
1
1
  import { Config } from "./config.js";
2
2
  import { Families } from "./families.js";
3
3
  import { Files } from "./files.js";
4
+ import { Jekyll } from "./jekyll.js";
5
+ import { Taxa } from "./taxa.js";
4
6
  import { GlossaryPages } from "./web/glossarypages.js";
5
7
 
6
8
  class BasePageRenderer {
7
9
 
8
10
  static render( outputDir, taxa, familyCols ) {
9
11
 
12
+ const siteGenerator = new Jekyll( outputDir );
13
+
10
14
  // Copy static files
11
- Files.rmDir( outputDir );
12
15
  // First copy default Jekyll files from package.
13
16
  Files.copyDir( Config.getPackageDir() + "/jekyll", outputDir );
14
17
  // Then copy Jekyll files from current dir (which may override default files).
15
18
  Files.copyDir( "jekyll", outputDir );
19
+
16
20
  // Copy illustrations.
17
- Files.copyDir( Config.getPackageDir() + "/data/illustrations/optimized", outputDir + "/i" );
21
+ siteGenerator.copyIllustrations( Taxa.getFlowerColors() );
18
22
 
19
23
  Families.renderPages( outputDir, familyCols );
20
24
 
21
- new GlossaryPages( outputDir ).renderPages();
25
+ new GlossaryPages( siteGenerator ).renderPages();
22
26
 
23
27
  this.renderTools( outputDir, taxa );
24
28
 
@@ -1,4 +1,5 @@
1
1
  import { CommandProcessor } from "./commandprocessor.js";
2
+ import { Files } from "./files.js";
2
3
  import { TaxaProcessor } from "./taxaprocessor.js";
3
4
 
4
5
  class CommandAndTaxaProcessor extends CommandProcessor {
@@ -14,6 +15,8 @@ class CommandAndTaxaProcessor extends CommandProcessor {
14
15
  if ( this.helpShown() ) {
15
16
  return;
16
17
  }
18
+ Files.rmDir( this.getOptions().outputdir );
19
+
17
20
  await this.#taxaProcessor.process( commandRunner );
18
21
  }
19
22
 
@@ -0,0 +1,34 @@
1
+ import { Files } from "../files.js";
2
+ import { SiteGenerator } from "../sitegenerator.js";
3
+
4
+ class EBookSiteGenerator extends SiteGenerator {
5
+
6
+ constructor( baseDir ) {
7
+ super( baseDir );
8
+ }
9
+
10
+ #pageEnd() {
11
+ return "</body></html>";
12
+ }
13
+
14
+ #pageStart( depth, attributes ) {
15
+ let html = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
16
+ html += "<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:epub=\"http://www.idpf.org/2007/ops\">";
17
+ html += "<head><title>" + attributes.title + "</title>";
18
+ html += "<link href=\"" + "../".repeat( depth ) + "css/main.css\" rel=\"stylesheet\" />";
19
+ html += "</head><body>";
20
+ return html;
21
+ }
22
+
23
+ #wrap( depth, content, attributes ) {
24
+ return this.#pageStart( depth, attributes ) + content + this.#pageEnd();
25
+ }
26
+
27
+ writeTemplate( content, attributes, filename ) {
28
+ const depth = ( filename.match( /\//g ) || [] ).length;
29
+ Files.write( Files.join( this.getBaseDir(), filename ), this.#wrap( depth, content, attributes ) );
30
+ }
31
+
32
+ }
33
+
34
+ export { EBookSiteGenerator };
@@ -1,46 +1,15 @@
1
- import * as fs from "node:fs";
2
-
3
- import { EBookPage } from "./ebookpage.js";
4
- import { XHTML } from "./xhtml.js";
5
-
6
- import { HTML } from "../html.js";
7
- import { Markdown } from "../markdown.js";
1
+ import { GlossaryPages as BaseGlossaryPages } from "../web/glossarypages.js";
8
2
  import { EBook } from "./ebook.js";
9
3
 
10
- import { Glossary } from "../plants/glossary.js";
11
-
12
- class GlossaryPages {
13
-
14
- #glossary;
15
-
16
- constructor() {
17
- this.#glossary = new Glossary();
18
- }
19
-
20
- createPages( contentDir ) {
21
-
22
- const termList = [];
23
-
24
- // Create target directory.
25
- const dirTarget = contentDir + "/g";
26
- fs.mkdirSync( dirTarget, { recursive: true } );
27
-
28
- for ( const entry of this.#glossary.getEntries() ) {
29
-
30
- new PageGlossaryEntry( contentDir, entry ).create();
31
-
32
- // Add term to index page list.
33
- termList.push( HTML.getLink( "g/" + entry.getHTMLFileName(), entry.getTermName() ) );
34
-
35
- }
4
+ class GlossaryPages extends BaseGlossaryPages {
36
5
 
37
- // Write glossary index page.
38
- new PageGlossary( contentDir, termList ).create();
6
+ constructor( siteGenerator ) {
7
+ super( siteGenerator );
39
8
  }
40
9
 
41
10
  getManifestEntries() {
42
11
 
43
- const glossaryEntries = this.#glossary.getEntries();
12
+ const glossaryEntries = this.getGlossary().getEntries();
44
13
  const manifestEntries = [];
45
14
 
46
15
  manifestEntries.push( EBook.getManifestEntry( "g", "glossary.html" ) );
@@ -54,7 +23,7 @@ class GlossaryPages {
54
23
 
55
24
  getSpineEntries() {
56
25
 
57
- const glossaryEntries = this.#glossary.getEntries();
26
+ const glossaryEntries = this.getGlossary().getEntries();
58
27
  const spineEntries = [];
59
28
 
60
29
  spineEntries.push( EBook.getSpineEntry( "g", "glossary.html" ) );
@@ -68,34 +37,4 @@ class GlossaryPages {
68
37
 
69
38
  }
70
39
 
71
- class PageGlossary extends EBookPage {
72
-
73
- #entries;
74
-
75
- constructor( outputDir, entries ) {
76
- super( outputDir + "/glossary.html", "Glossary" );
77
- this.#entries = entries;
78
- }
79
-
80
- renderPageBody() {
81
- const html = XHTML.textElement( "h1", this.getTitle() );
82
- return html + XHTML.wrap( "ol", XHTML.arrayToLI( this.#entries ) );
83
- }
84
- }
85
-
86
- class PageGlossaryEntry extends EBookPage {
87
-
88
- #entry;
89
-
90
- constructor( outputDir, entry ) {
91
- super( outputDir + "/g/" + entry.getHTMLFileName(), entry.getTermName(), "../" );
92
- this.#entry = entry;
93
- }
94
-
95
- renderPageBody() {
96
- const html = XHTML.textElement( "h1", this.getTitle() );
97
- return html + Markdown.strToHTML( this.#entry.getMarkdown() );
98
- }
99
- }
100
-
101
40
  export { GlossaryPages };
@@ -7,14 +7,17 @@ import { Config, CSV, Files } from "@ca-plant-list/ca-plant-list";
7
7
 
8
8
  import { Image } from "./image.js";
9
9
  import { EBook } from "./ebook.js";
10
+ import { Taxa } from "../taxa.js";
10
11
 
11
12
  class Images {
12
13
 
13
- #taxa;
14
+ #siteGenerator;
14
15
  #contentDir;
16
+ #taxa;
15
17
  #images = {};
16
18
 
17
- constructor( contentDir, taxa ) {
19
+ constructor( siteGenerator, contentDir, taxa ) {
20
+ this.#siteGenerator = siteGenerator;
18
21
  this.#contentDir = contentDir;
19
22
  this.#taxa = taxa;
20
23
  }
@@ -55,20 +58,16 @@ class Images {
55
58
  await Files.fetch( src, srcFileName );
56
59
  }
57
60
 
58
- await new sharp( srcFileName ).resize( { width: 400 } ).jpeg( { quality: 40 } ).toFile( targetFileName );
61
+ await new sharp( srcFileName ).resize( { width: 300 } ).jpeg( { quality: 40 } ).toFile( targetFileName );
59
62
 
60
63
  imageList.push( new Image( imagePrefix + "/" + filename, row[ "credit" ] ) );
61
64
 
62
65
  }
63
66
 
64
- this.#getIllustrations( this.#contentDir );
67
+ this.#siteGenerator.copyIllustrations( Taxa.getFlowerColors() );
65
68
 
66
69
  }
67
70
 
68
- #getIllustrations() {
69
- Files.copyDir( Config.getPackageDir() + "/data/illustrations/optimized", this.#contentDir + "/i" );
70
- }
71
-
72
71
  getManifestEntries() {
73
72
 
74
73
  const entries = [];
@@ -83,6 +82,9 @@ class Images {
83
82
  return entries.join( "" );
84
83
  }
85
84
 
85
+ getTaxonImages( name ) {
86
+ return this.#images[ name ];
87
+ }
86
88
  }
87
89
 
88
90
  export { Images };
@@ -67,6 +67,7 @@ class TaxonPage extends EBookPage {
67
67
  html += renderCustomText( this.#taxon.getBaseFileName() );
68
68
 
69
69
  if ( this.#photos ) {
70
+ let photoHTML = "";
70
71
  for ( const photo of this.#photos ) {
71
72
  const src = photo.getSrc();
72
73
  const dimensions = sizeOf( this.#outputDir + "/" + src );
@@ -75,7 +76,10 @@ class TaxonPage extends EBookPage {
75
76
  if ( caption ) {
76
77
  img += XHTML.textElement( "figcaption", caption );
77
78
  }
78
- html += XHTML.wrap( "figure", img );
79
+ photoHTML += XHTML.wrap( "figure", img );
80
+ }
81
+ if ( photoHTML ) {
82
+ html += XHTML.wrap( "div", photoHTML );
79
83
  }
80
84
  }
81
85
 
@@ -1,6 +1,6 @@
1
+ import { Taxa } from "../../taxa.js";
1
2
  import { EBookPage } from "../ebookpage.js";
2
3
  import { XHTML } from "../xhtml.js";
3
- import { FLOWER_COLOR_NAMES } from "../../taxa.js";
4
4
  import { PageListFlowers } from "./page_list_flowers.js";
5
5
 
6
6
  class TOCPage extends EBookPage {
@@ -30,7 +30,7 @@ class TOCPage extends EBookPage {
30
30
  #getFlowerColorLinks() {
31
31
  const html = XHTML.textElement( "span", "Flower Color" );
32
32
  const links = [];
33
- for ( const colorName of FLOWER_COLOR_NAMES ) {
33
+ for ( const colorName of Taxa.getFlowerColorNames() ) {
34
34
  links.push( XHTML.getLink( "list_fc_" + colorName + ".html", colorName ) );
35
35
  }
36
36
  return html + XHTML.wrap( "ol", XHTML.arrayToLI( links ) );