@ca-plant-list/ca-plant-list 0.2.1 → 0.2.2

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 (47) hide show
  1. package/data/exceptions.json +43 -1
  2. package/data/photos.csv +2 -1
  3. package/data/taxa.csv +34 -35
  4. package/data/text/Bromus-catharticus-var-catharticus.md +1 -0
  5. package/data/text/Bromus-catharticus-var-elatus.md +1 -0
  6. package/data/text/Bromus-sitchensis-var-carinatus.md +1 -0
  7. package/data/text/Bromus-sitchensis-var-marginatus.md +1 -0
  8. package/data/text/Castilleja-foliolosa.md +1 -0
  9. package/data/text/Grindelia-camporum.md +1 -0
  10. package/data/text/Grindelia-hirsutula.md +1 -0
  11. package/data/text/Layia-chrysanthemoides.md +1 -0
  12. package/data/text/Layia-gaillardioides.md +1 -0
  13. package/data/text/Layia-hieracioides.md +1 -0
  14. package/data/text/Layia-platyglossa.md +1 -0
  15. package/data/text/Lithophragma-affine.md +1 -0
  16. package/data/text/Lithophragma-heterophyllum.md +1 -0
  17. package/data/text/Lithophragma-parviflorum-var-parviflorum.md +1 -0
  18. package/data/text/Lupinus-formosus-var-formosus.md +1 -0
  19. package/data/text/Lupinus-latifolius-var-latifolius.md +1 -0
  20. package/data/text/Lupinus-microcarpus-var-densiflorus.md +1 -0
  21. package/data/text/Lupinus-microcarpus-var-microcarpus.md +1 -0
  22. package/data/text/Lupinus-succulentus.md +1 -0
  23. package/data/text/Wyethia-angustifolia.md +1 -0
  24. package/data/text/Wyethia-glabra.md +1 -0
  25. package/data/text/Wyethia-helenioides.md +1 -0
  26. package/ebook/css/main.css +9 -52
  27. package/ebook/i/f-blue.svg +5 -0
  28. package/ebook/i/f-orange.svg +5 -0
  29. package/ebook/i/f-pink.svg +5 -0
  30. package/ebook/i/f-red.svg +5 -0
  31. package/ebook/i/f-white.svg +5 -0
  32. package/ebook/i/f-yellow.svg +5 -0
  33. package/jekyll/assets/css/main.css +6 -0
  34. package/lib/ebook/ebook.js +3 -3
  35. package/lib/ebook/ebookpage.js +4 -0
  36. package/lib/ebook/pages/page_list_families.js +27 -0
  37. package/lib/ebook/pages/page_list_flower_color.js +26 -0
  38. package/lib/ebook/pages/page_list_species.js +26 -0
  39. package/lib/ebook/pages/taxonpage.js +4 -2
  40. package/lib/ebook/pages/tocpage.js +18 -11
  41. package/lib/ebook/plantbook.js +67 -10
  42. package/lib/exceptions.js +14 -4
  43. package/lib/families.js +4 -0
  44. package/lib/index.d.ts +10 -6
  45. package/lib/pagetaxon.js +2 -2
  46. package/lib/taxa.js +53 -2
  47. package/package.json +1 -1
@@ -1 +1,43 @@
1
- {}
1
+ {
2
+ "Castilleja ambigua subsp. ambigua": {
3
+ "rpi": {
4
+ "translation-to-rpi": "Castilleja ambigua var. ambigua"
5
+ }
6
+ },
7
+ "Castilleja ambigua var. ambigua": {
8
+ "rpi": {
9
+ "translation": "Castilleja ambigua subsp. ambigua"
10
+ }
11
+ },
12
+ "Erysimum capitatum var. angustatum": {
13
+ "calflora": {
14
+ "badjepsonid": true
15
+ },
16
+ "jepson": {
17
+ "allowsynonym": true
18
+ }
19
+ },
20
+ "Heterotheca oregona var. rudis": {
21
+ "inat": {
22
+ "notintaxondata": true
23
+ }
24
+ },
25
+ "Horkelia californica var. frondosa": {
26
+ "inat": {
27
+ "notintaxondata": true
28
+ }
29
+ },
30
+ "Myosurus minimus subsp. apus": {
31
+ "jepson": {
32
+ "notineflora": "in CNPS Rare Plant Inventory"
33
+ }
34
+ },
35
+ "Streptanthus albidus subsp. peramoenus": {
36
+ "calflora": {
37
+ "notintaxondata": true
38
+ },
39
+ "jepson": {
40
+ "allowsynonym": true
41
+ }
42
+ }
43
+ }
package/data/photos.csv CHANGED
@@ -3,4 +3,5 @@ Calochortus argillosus,https://inaturalist-open-data.s3.amazonaws.com/photos/210
3
3
  Calochortus luteus,https://inaturalist-open-data.s3.amazonaws.com/photos/257812293/original.jpg,,"(c) eeneill, some rights reserved (CC BY-NC)"
4
4
  Calochortus venustus,https://inaturalist-open-data.s3.amazonaws.com/photos/268338027/original.jpg,,"(c) Gena Bentall, some rights reserved (CC BY-NC)"
5
5
  Ceanothus cuneatus,https://inaturalist-open-data.s3.amazonaws.com/photos/266280254/original.jpg,,"(c) Ixchel Gonzalez-Ramirez, some rights reserved (CC BY-NC)"
6
- Claytonia gypsophiloides,https://inaturalist-open-data.s3.amazonaws.com/photos/268277390/original.jpeg,,"(c) Christian Naventi, some rights reserved (CC BY-NC)"
6
+ Claytonia gypsophiloides,https://inaturalist-open-data.s3.amazonaws.com/photos/268277390/original.jpeg,,"(c) Christian Naventi, some rights reserved (CC BY-NC)"
7
+ Lithophragma heterophyllum,https://inaturalist-open-data.s3.amazonaws.com/photos/104408/medium.jpg,,"(c) dloarie, some rights reserved (CC BY)"
package/data/taxa.csv CHANGED
@@ -104,7 +104,7 @@ Angelica californica,,N,13406,364,75448
104
104
  Anisocarpus madioides,,N,77551,10770,53137
105
105
  Anthemis cotula,"mayweed,dog-fennel",X,1067,392,52841
106
106
  Anthoxanthum occidentale,,N,13521,11332,75474
107
- Anthriscus caucalis,bur-chervil,X,13523,396,52846
107
+ Anthriscus caucalis,bur-chervil,X,13523,396,52846,white
108
108
  Antirrhinum kelloggii,,N,13568,401,165675
109
109
  Antirrhinum majus,snapdragon,X,13557,404,48969
110
110
  Antirrhinum thompsonii,Sierra snapdragon,N,108978,14286,168306
@@ -326,14 +326,14 @@ Carex tumulicola,,N,17908,1645,64183
326
326
  Carex unilateralis,lateral sedge,N,17915,1646,76123
327
327
  Carpobrotus chilensis,sea fig,X,77164,1659,56026
328
328
  Carpobrotus edulis,freeway iceplant,X,17975,1660,49322
329
- Castilleja affinis subsp. affinis,Indian paintbrush,N,70068,1669,50043
329
+ Castilleja affinis subsp. affinis,Indian paintbrush,N,70068,1669,50043,red
330
330
  Castilleja ambigua subsp. ambigua,johnny-nip,N,49732,1673,61110,,3361,4.2
331
331
  Castilleja applegatei subsp. martinii,,N,76733,1679,1041230
332
332
  Castilleja attenuata,valley tassels,N,18175,1683,49341
333
333
  Castilleja densiflora subsp. densiflora,owl's-clover,N,49740,1691,61233
334
334
  Castilleja exserta subsp. exserta,purple owl's-clover,N,49744,1695,59012
335
335
  Castilleja exserta subsp. latifolia,,N,49745,1696,61109
336
- Castilleja foliolosa,woolly paintbrush,N,18205,1698,56760
336
+ Castilleja foliolosa,woolly paintbrush,N,18205,1698,56760,red
337
337
  Castilleja rubicundula subsp. lithospermoides,cream sacs,N,49761,1729,57269
338
338
  Castilleja subinclusa subsp. franciscana,,N,76740,1733,53916
339
339
  Castilleja subinclusa subsp. subinclusa,,N,74693,1734,53917
@@ -430,7 +430,7 @@ Claytonia exigua subsp. glauca,,N,76949,2233,57229
430
430
  Claytonia gypsophiloides,candy stripers,N,19620,2234,55344,pink
431
431
  Claytonia parviflora subsp. parviflora,,N,74695,2242,58296
432
432
  Claytonia perfoliata subsp. mexicana,,N,76956,2245,53004
433
- Claytonia perfoliata subsp. perfoliata,Miner's lettuce,N,49921,2246,53002
433
+ Claytonia perfoliata subsp. perfoliata,Miner's lettuce,N,49921,2246,53002,white
434
434
  Claytonia rubra subsp. depressa,red stem spring beauty,N,76957,2248,79751
435
435
  Clematis lasiantha,pipestems,N,19682,2254,49876
436
436
  Clematis ligusticifolia,virgin's bower,N,19683,2255,58996
@@ -446,7 +446,7 @@ Collinsia sparsiflora var. sparsiflora,,N,56723,2291,64295
446
446
  Collinsia tinctoria,,N,20008,2293,51850
447
447
  Collomia diversifolia,serpentine collomia,N,20020,2299,62230,,126,4.3
448
448
  Collomia heterophylla,,N,20022,2301,52996
449
- Conium maculatum,poison hemlock,X,20136,2317,52998
449
+ Conium maculatum,poison hemlock,X,20136,2317,52998,white
450
450
  Consolida ajacis,,X,20161,9821,401314
451
451
  Convolvulus arvensis,bindweed,X,20203,2321,53021
452
452
  Convolvulus simulans,,N,20208,2322,76433,,1636,4.2
@@ -801,7 +801,7 @@ Gilia achilleifolia subsp. achilleifolia,,N,50744,3813,51101
801
801
  Gilia achilleifolia subsp. multicaulis,,N,50745,3814,51102
802
802
  Gilia capitata subsp. capitata,,N,50764,3834,57798
803
803
  Gilia capitata subsp. staminea,,N,50769,3839,57801
804
- Gilia clivorum,,N,26880,3842,56630
804
+ Gilia clivorum,purplespot gilia,N,26880,3842,56630
805
805
  Gilia millefoliata,,N,95310,3869,57797,,1923,1B.2,,,S2,G2
806
806
  Gilia tricolor subsp. diffusa,bird's-eye gilia,N,50826,3900,79920
807
807
  Gilia tricolor subsp. tricolor,bird's-eye gilia,N,50827,3901,79921
@@ -814,9 +814,9 @@ Glyceria leptostachya,narrow mannagrass,N,27079,3929,77292
814
814
  Glycyrrhiza lepidota,wild licorice,N,27117,3933,58896
815
815
  Gnaphalium palustre,lowland cudweed,N,3082,3946,57980
816
816
  Gratiola ebracteata,bractless hedge hyssop,N,27292,3952,77300
817
- Grindelia camporum,,N,3099,3956,56953
818
- Grindelia hirsutula,,N,3107,3960,55364
819
- Grindelia stricta var. angustifolia,marsh gumplant,N,77358,3968,61991
817
+ Grindelia camporum,,N,3099,3956,56953,yellow
818
+ Grindelia hirsutula,,N,3107,3960,55364,yellow
819
+ Grindelia stricta var. angustifolia,marsh gumplant,N,77358,3968,61991,yellow
820
820
  Gruvelia pusilla,little combseed,N,105901,14570,57694
821
821
  Gutierrezia californica,California matchweed,N,3140,3977,57978
822
822
  Hainardia cylindrica,,X,27553,3996,60285
@@ -856,7 +856,6 @@ Heterotheca oregona var. rudis,Oregon goldenaster,N,7614,4146
856
856
  Heterotheca oregona var. scaberrima,goldenaster,N,7616,4147,80937
857
857
  Heterotheca sessiliflora subsp. bolanderi,Bolander's goldenaster,N,74443,4151,61170
858
858
  Heterotheca sessiliflora subsp. echioides,,N,74445,4152,58834
859
- Heterotheca sessiliflora var. bolanderioides,,N,,,58834
860
859
  Heuchera micrantha,alumroot,N,28126,4171,51274
861
860
  Hibiscus lasiocarpos var. occidentalis,rose-mallow,N,91751,11194,80940,,906,1B.2
862
861
  Hieracium albiflorum,white hawkweed,N,3471,4184,63937
@@ -964,12 +963,12 @@ Lasthenia platycarpha,,N,3741,4595,60138
964
963
  Lathyrus jepsonii var. californicus,,N,76680,4607,81010
965
964
  Lathyrus jepsonii var. jepsonii,delta tule pea,N,76681,4608,81011,,956,1B.2
966
965
  Lathyrus latifolius,perennial sweet-pea,X,30318,4613,61009
967
- Lathyrus vestitus var. vestitus,Pacific pea,N,75728,4629,53109
968
- Layia chrysanthemoides,,N,3745,4636,60139
969
- Layia gaillardioides,,N,3748,4639,64246
966
+ Lathyrus vestitus var. vestitus,Pacific pea,N,75728,4629,53109,white
967
+ Layia chrysanthemoides,,N,3745,4636,60139,yellow
968
+ Layia gaillardioides,woodland tidy-tips,N,3748,4639,64246,yellow
970
969
  Layia glandulosa,,N,3749,4640,58003
971
- Layia hieracioides,,N,3751,4642,58838
972
- Layia platyglossa,tidy-tips,N,3757,4649,50876
970
+ Layia hieracioides,tall tidy-tips,N,3751,4642,58838,yellow
971
+ Layia platyglossa,tidy-tips,N,3757,4649,50876,yellow
973
972
  Leersia oryzoides,rice cutgrass,N,30431,4652,64177
974
973
  Legenere limosa,false Venus' looking glass,N,30433,4653,60168,,965,1B.1
975
974
  Lemna gibba,,N,30457,4656,63913
@@ -1031,11 +1030,11 @@ Linanthus dichotomus subsp. dichotomus,evening snow,N,51286,10624,80000
1031
1030
  Linanthus dichotomus subsp. meridianus,,N,51287,10625,80001
1032
1031
  Linum bienne,,X,31144,4906,55679
1033
1032
  Linum lewisii var. lewisii,blue flax,N,60912,4910,60495
1034
- Lithophragma affine,woodland star,N,31236,4922,50803
1033
+ Lithophragma affine,woodland star,N,31236,4922,50803,white
1035
1034
  Lithophragma bolanderi,,N,31238,4923,77787
1036
1035
  Lithophragma cymbalaria,,N,31241,4925,58323
1037
- Lithophragma heterophyllum,,N,31244,4927,53124
1038
- Lithophragma parviflorum var. parviflorum,,N,60952,4930,81027
1036
+ Lithophragma heterophyllum,hill starflower,N,31244,4927,53124,white
1037
+ Lithophragma parviflorum var. parviflorum,,N,60952,4930,81027,white
1039
1038
  Lobularia maritima,sweet alyssum,X,31347,4939,56992
1040
1039
  Logfia filaginoides,herba impia,N,81847,10960,64254
1041
1040
  Logfia gallica,,X,31363,9521,56949
@@ -1064,13 +1063,13 @@ Lupinus benthamii,spider lupine,N,31791,5117,59565
1064
1063
  Lupinus bicolor,miniature lupine,N,31793,5118,50614,blue
1065
1064
  Lupinus chamissonis,beach blue lupine,N,31831,5125,61011
1066
1065
  Lupinus concinnus,Bajada lupine,N,31835,5129,58901
1067
- Lupinus formosus var. formosus,summer lupine,N,61315,5148,61822
1066
+ Lupinus formosus var. formosus,summer lupine,N,61315,5148,61822,blue
1068
1067
  Lupinus latifolius var. dudleyi,,N,76660,5161,81063
1069
- Lupinus latifolius var. latifolius,wood lupine,N,75772,5162,64242
1068
+ Lupinus latifolius var. latifolius,wood lupine,N,75772,5162,64242,blue
1070
1069
  Lupinus littoralis var. variicolor,,N,80538,14304
1071
1070
  Lupinus luteolus,butter lupine,N,31956,5176,77875
1072
- Lupinus microcarpus var. densiflorus,,N,76668,5184,241537
1073
- Lupinus microcarpus var. microcarpus,chick lupine,N,75776,5186,58159
1071
+ Lupinus microcarpus var. densiflorus,,N,76668,5184,241537,"yellow,white"
1072
+ Lupinus microcarpus var. microcarpus,chick lupine,N,75776,5186,58159,"pink,blue"
1074
1073
  Lupinus nanus,sky lupine,N,31978,5189,50612,blue
1075
1074
  Lupinus pachylobus,big pod lupine,N,31998,5196,50613
1076
1075
  Lupinus succulentus,arroyo lupine,N,32095,5217,56759,blue
@@ -1089,11 +1088,11 @@ Lythrum hyssopifolia,grass-poly,X,32401,10626,58934
1089
1088
  Lythrum salicaria,,X,32407,5261,61321
1090
1089
  Lythrum tribracteatum,,X,32409,5262,77919
1091
1090
  Madia anomala,,N,4038,5279,69927
1092
- Madia elegans,common madia,N,4044,5284,56974
1091
+ Madia elegans,common madia,N,4044,5284,56974,yellow
1093
1092
  Madia exigua,threadstem madia,N,4045,5289,56971
1094
- Madia gracilis,slender tarweed,N,4047,5291,53135
1093
+ Madia gracilis,slender tarweed,N,4047,5291,53135,yellow
1095
1094
  Madia radiata,showy madia,N,4053,5296,77924,,1054,1B.1
1096
- Madia sativa,coast tarweed,N,4055,5298,53143
1095
+ Madia sativa,coast tarweed,N,4055,5298,53143,yellow
1097
1096
  Maianthemum racemosum,false Solomon's seal,N,32495,10096,51062
1098
1097
  Maianthemum stellatum,,N,32497,9629,53268
1099
1098
  Malacothamnus fremontii,white-coat mallow,N,32524,5312,70397
@@ -1122,9 +1121,9 @@ Medicago polymorpha,burclover,X,32938,5385,53151
1122
1121
  Medicago sativa,alfalfa,X,32943,5387,57057
1123
1122
  Melica bulbosa,,N,33073,5390,77979
1124
1123
  Melica californica,California melic,N,33075,5392,57186
1125
- Melica imperfecta,,N,33080,5399,52802
1124
+ Melica imperfecta,little California melic,N,33080,5399,52802
1126
1125
  Melica subulata,,N,33089,5403,77986
1127
- Melica torreyana,,N,33090,5404,52804
1126
+ Melica torreyana,Torrey's melic,N,33090,5404,52804
1128
1127
  Melilotus albus,white sweetclover,X,33153,10971,58907
1129
1128
  Melilotus indicus,sourclover,X,33149,5406,57065
1130
1129
  Melissa officinalis,lemon balm,X,33161,5408,59901
@@ -1280,11 +1279,11 @@ Petunia parviflora,wild petunia,N,37378,6279,159650
1280
1279
  Phacelia breweri,,N,37425,6292,68813
1281
1280
  Phacelia californica,rock phacelia,N,37426,6293,53170
1282
1281
  Phacelia ciliata,great valley phacelia,N,37432,6302,58180
1283
- Phacelia distans,sordid phacelia,N,37450,6318,56631
1282
+ Phacelia distans,"sordid phacelia,distant phacelia",N,37450,6318,56631
1284
1283
  Phacelia divaricata,,N,37451,6319,51093
1285
1284
  Phacelia douglasii,,N,37452,6320,58182
1286
1285
  Phacelia egena,,N,37455,6322,58183
1287
- Phacelia imbricata var. imbricata,,N,78483,13159,53172
1286
+ Phacelia imbricata var. imbricata,mountain phacelia,N,78483,13159,53172,white
1288
1287
  Phacelia malvifolia var. malvifolia,,N,73204,13162,58923
1289
1288
  Phacelia malvifolia,stinging phacelia,N,37514,6358,58923
1290
1289
  Phacelia nemoralis var. nemoralis,bristly phacelia,N,78488,13163,53174
@@ -1570,7 +1569,7 @@ Scirpus microcarpus,,N,43718,7398,59068
1570
1569
  Scoliopus bigelovii,,N,43824,7416,48990
1571
1570
  Scolymus hispanicus,golden thistle,X,4661,7417,79009
1572
1571
  Scribneria bolanderi,,N,43846,7420,57196
1573
- Scrophularia californica,California figwort,N,43849,7422,50812
1572
+ Scrophularia californica,California figwort,N,43849,7422,50812,white
1574
1573
  Scutellaria californica,,N,43883,7432,59791
1575
1574
  Scutellaria galericulata,,N,43891,7433,79016,,1767,2B.2,,,S2,G5
1576
1575
  Scutellaria siphocampyloides,,N,43926,7437,59792
@@ -1588,7 +1587,7 @@ Senecio hydrophilus,water ragwort,N,4759,7501,64165
1588
1587
  Senecio jacobaea,tansy ragwort,X,4770,7508,62498
1589
1588
  Senecio minimus,Australian fireweed,X,2580,11076,60980
1590
1589
  Senecio sylvaticus,woodland ragwort,X,4853,7522,53210
1591
- Senecio vulgaris,common groundsel,X,4866,7524,53211
1590
+ Senecio vulgaris,common groundsel,X,4866,7524,53211,yellow
1592
1591
  Sequoia sempervirens,coast redwood,N,44175,7531,47372
1593
1592
  Sesuvium verrucosum,sea-purslane,N,44236,7534,60112
1594
1593
  Setaria parviflora,marsh brittlegrass,N,44257,11079,79068
@@ -1653,7 +1652,7 @@ Stachys albens,,N,45339,7754,58192
1653
1652
  Stachys bullata,,N,45343,7756,58930
1654
1653
  Stachys pycnantha,short-spike hedge nettle,N,45389,7759,57123
1655
1654
  Stachys rigida var. quercetorum,,N,80610,12038,81388
1656
- Stachys rigida var. rigida,hedge nettle,N,80611,12039,53296
1655
+ Stachys rigida var. rigida,hedge nettle,N,80611,12039,53296,pink
1657
1656
  Stebbinsoseris heterocarpa,,N,76210,7768,50804
1658
1657
  Stellaria media,common chickweed,X,45497,7776,53298
1659
1658
  Stellaria nitens,shining chickweed,N,45502,7777,57007
@@ -1690,7 +1689,7 @@ Tamarix ramosissima,saltcedar,X,46076,7917,56015
1690
1689
  Tanacetum parthenium,feverfew,X,5215,7919,54520
1691
1690
  Taraxacum erythrospermum,red-seeded dandelion,X,5225,12084,79317
1692
1691
  Taraxacum officinale,common dandelion,X,5231,7922,47602
1693
- Taraxia ovata,sun cup,N,89233,12085,68182
1692
+ Taraxia ovata,sun cup,N,89233,12085,68182,yellow
1694
1693
  Tauschia hartwegii,,N,46097,7925,54948
1695
1694
  Taxus brevifolia,,N,46109,7929,55209
1696
1695
  Tellima grandiflora,fringe cups,N,46142,7931,51655
@@ -1706,8 +1705,8 @@ Tonella tenella,,N,46732,8000,79369
1706
1705
  Torilis arvensis,tall sock-destroyer,X,46743,8004,56846
1707
1706
  Torilis nodosa,short sock-destroyer,X,46747,8007,53304
1708
1707
  Torreyochloa pallida var. pauciflora,,N,67197,8010,81431
1709
- Toxicodendron diversilobum,poison-oak,N,46791,8015,51080
1710
- Toxicoscordion fremontii,zigadene,N,89163,11103,49649
1708
+ Toxicodendron diversilobum,poison-oak,N,46791,8015,51080,white
1709
+ Toxicoscordion fremontii,zigadene,N,89163,11103,49649,white
1711
1710
  Toxicoscordion paniculatum,,N,46802,11105,79380
1712
1711
  Toxicoscordion venenosum var. venenosum,death-camas,N,93851,11106,81432
1713
1712
  Tradescantia fluminensis,,X,77137,8017,79382
@@ -0,0 +1 @@
1
+ Lemma awn < 4mm.
@@ -0,0 +1 @@
1
+ Lemma awn 4mm or longer. 9-11 prominent veins on distal half of lemma.
@@ -0,0 +1 @@
1
+ Most awns 7mm or longer. 7 lemma veins; veins obscure.
@@ -0,0 +1 @@
1
+ Most awns 4-7mm.
@@ -0,0 +1 @@
1
+ Gray-green to densely white-woolly, hairs branched.
@@ -0,0 +1 @@
1
+ Phyllaries flattened only at bases (rounded in cross section distally), phyllary tips often reflexed, or coiled; plants generally not hairy.
@@ -0,0 +1 @@
1
+ Phyllaries flattened, plants generally hairy.
@@ -0,0 +1 @@
1
+ Plant not glandular. Ray flowers often white-tipped.
@@ -0,0 +1 @@
1
+ Plant glandular, strongly scented. Stem purple-streaked. Ray flowers often white-tipped.
@@ -0,0 +1 @@
1
+ Plant glandular. Stem with purple spots or streaks. Ray flowers yellow, 1-4mm.
@@ -0,0 +1 @@
1
+ Plant glandular. Stem without black dots or streaks. Anthers usually purple. Ray flowers often white-tipped.
@@ -0,0 +1 @@
1
+ Pedicel 3-10 mm, floral tube conical at base. In open, grassy areas.
@@ -0,0 +1 @@
1
+ Pedicel 2 mm or less, floral tube squared off at base. In shaded areas.
@@ -0,0 +1 @@
1
+ Basal leaves either compound or deeply divided (more than half way to base of blade).
@@ -0,0 +1 @@
1
+ Perennial. Keel margins not hairy.
@@ -0,0 +1 @@
1
+ Perennial. Fruit densely hairy.
@@ -0,0 +1 @@
1
+ Annual. At least lower part of stem clearly hollow. Lower keel margins usually not hairy or less hairy than upper. Flowers generally yellow or white.
@@ -0,0 +1 @@
1
+ Annual. At least lower part of stem clearly hollow. Lower keel margins usually not hairy or less hairy than upper. Flowers generally pink or purple.
@@ -0,0 +1 @@
1
+ Annual. Fruit not densely hairy.
@@ -0,0 +1 @@
1
+ Outer phyllaries narrow and roughly the same width as inner.
@@ -0,0 +1 @@
1
+ Outer phyllaries wide, leaf-like, and usually much larger than inner phyllaries. Generally not hairy or with some glandular hairs.
@@ -0,0 +1 @@
1
+ Outer phyllaries wide, leaf-like, and usually much larger than inner phyllaries. Plant densely tomentose.
@@ -1,59 +1,16 @@
1
- img {
2
- width: 100%;
3
- }
4
-
5
- figure {
6
- page-break-inside: avoid;
7
- }
8
-
9
- span.color {
10
- border: solid black 1px;
11
- border-radius: .25rem;
12
- margin-right: .5rem;
13
- padding: .25rem;
14
- }
15
-
16
- span.color.blue {
17
- background-color: blue;
18
- color: white;
19
- }
20
-
21
- span.color.pink {
22
- background-color: pink;
23
- color: white;
24
- }
25
-
26
- span.color.red {
27
- background-color: red;
28
- color: white;
29
- }
30
-
31
- span.color.yellow {
32
- background-color: yellow;
33
- color: black;
34
- }
35
-
36
- span.color.white {
37
- background-color: white;
38
- color: black;
39
- }
40
-
41
- span.color.blue::after {
42
- content: "Blue"
1
+ * {
2
+ font-family: Georgia, 'Times New Roman', Times, serif;
43
3
  }
44
4
 
45
- span.color.pink::after {
46
- content: "Pink"
47
- }
48
-
49
- span.color.red::after {
50
- content: "Red"
5
+ img {
6
+ width: 100%;
51
7
  }
52
8
 
53
- span.color.white::after {
54
- content: "White"
9
+ img.flr {
10
+ height: 32px;
11
+ width: 32px;
55
12
  }
56
13
 
57
- span.color.yellow::after {
58
- content: "Yellow"
14
+ figure {
15
+ page-break-inside: avoid;
59
16
  }
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"
2
+ viewBox="0 0 16 16">
3
+ <path fill="white" stroke="blue"
4
+ d="M11.424 8c.437-.052.811-.136 1.04-.268a2 2 0 0 0-2-3.464c-.229.132-.489.414-.752.767C9.886 4.63 10 4.264 10 4a2 2 0 1 0-4 0c0 .264.114.63.288 1.035-.263-.353-.523-.635-.752-.767a2 2 0 0 0-2 3.464c.229.132.603.216 1.04.268-.437.052-.811.136-1.04.268a2 2 0 1 0 2 3.464c.229-.132.489-.414.752-.767C6.114 11.37 6 11.736 6 12a2 2 0 1 0 4 0c0-.264-.114-.63-.288-1.035.263.353.523.635.752.767a2 2 0 1 0 2-3.464c-.229-.132-.603-.216-1.04-.268zM9 4a1.468 1.468 0 0 1-.045.205c-.039.132-.1.295-.183.484a12.88 12.88 0 0 1-.637 1.223L8 6.142a21.73 21.73 0 0 1-.135-.23 12.88 12.88 0 0 1-.637-1.223 4.216 4.216 0 0 1-.183-.484A1.473 1.473 0 0 1 7 4a1 1 0 1 1 2 0zM3.67 5.5a1 1 0 0 1 1.366-.366 1.472 1.472 0 0 1 .156.142c.094.1.204.233.326.4.245.333.502.747.742 1.163l.13.232a21.86 21.86 0 0 1-.265.002 12.88 12.88 0 0 1-1.379-.06 4.214 4.214 0 0 1-.51-.083 1.47 1.47 0 0 1-.2-.064A1 1 0 0 1 3.67 5.5zm1.366 5.366a1 1 0 0 1-1-1.732c.001 0 .016-.008.047-.02.037-.013.087-.028.153-.044.134-.032.305-.06.51-.083a12.88 12.88 0 0 1 1.379-.06c.09 0 .178 0 .266.002a21.82 21.82 0 0 1-.131.232c-.24.416-.497.83-.742 1.163a4.1 4.1 0 0 1-.327.4 1.483 1.483 0 0 1-.155.142zM9 12a1 1 0 0 1-2 0 1.476 1.476 0 0 1 .045-.206c.039-.131.1-.294.183-.483.166-.378.396-.808.637-1.223L8 9.858l.135.23c.241.415.47.845.637 1.223.083.19.144.352.183.484A1.338 1.338 0 0 1 9 12zm3.33-6.5a1 1 0 0 1-.366 1.366 1.478 1.478 0 0 1-.2.064c-.134.032-.305.06-.51.083-.412.045-.898.061-1.379.06-.09 0-.178 0-.266-.002l.131-.232c.24-.416.497-.83.742-1.163a4.1 4.1 0 0 1 .327-.4c.046-.05.085-.086.114-.11.026-.022.04-.03.041-.032a1 1 0 0 1 1.366.366zm-1.366 5.366a1.494 1.494 0 0 1-.155-.141 4.225 4.225 0 0 1-.327-.4A12.88 12.88 0 0 1 9.74 9.16a22 22 0 0 1-.13-.232l.265-.002c.48-.001.967.015 1.379.06.205.023.376.051.51.083.066.016.116.031.153.044l.048.02a1 1 0 1 1-1 1.732zM8 9a1 1 0 1 1 0-2 1 1 0 0 1 0 2z" />
5
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"
2
+ viewBox="0 0 16 16">
3
+ <path fill="white" stroke="orange"
4
+ d="M11.424 8c.437-.052.811-.136 1.04-.268a2 2 0 0 0-2-3.464c-.229.132-.489.414-.752.767C9.886 4.63 10 4.264 10 4a2 2 0 1 0-4 0c0 .264.114.63.288 1.035-.263-.353-.523-.635-.752-.767a2 2 0 0 0-2 3.464c.229.132.603.216 1.04.268-.437.052-.811.136-1.04.268a2 2 0 1 0 2 3.464c.229-.132.489-.414.752-.767C6.114 11.37 6 11.736 6 12a2 2 0 1 0 4 0c0-.264-.114-.63-.288-1.035.263.353.523.635.752.767a2 2 0 1 0 2-3.464c-.229-.132-.603-.216-1.04-.268zM9 4a1.468 1.468 0 0 1-.045.205c-.039.132-.1.295-.183.484a12.88 12.88 0 0 1-.637 1.223L8 6.142a21.73 21.73 0 0 1-.135-.23 12.88 12.88 0 0 1-.637-1.223 4.216 4.216 0 0 1-.183-.484A1.473 1.473 0 0 1 7 4a1 1 0 1 1 2 0zM3.67 5.5a1 1 0 0 1 1.366-.366 1.472 1.472 0 0 1 .156.142c.094.1.204.233.326.4.245.333.502.747.742 1.163l.13.232a21.86 21.86 0 0 1-.265.002 12.88 12.88 0 0 1-1.379-.06 4.214 4.214 0 0 1-.51-.083 1.47 1.47 0 0 1-.2-.064A1 1 0 0 1 3.67 5.5zm1.366 5.366a1 1 0 0 1-1-1.732c.001 0 .016-.008.047-.02.037-.013.087-.028.153-.044.134-.032.305-.06.51-.083a12.88 12.88 0 0 1 1.379-.06c.09 0 .178 0 .266.002a21.82 21.82 0 0 1-.131.232c-.24.416-.497.83-.742 1.163a4.1 4.1 0 0 1-.327.4 1.483 1.483 0 0 1-.155.142zM9 12a1 1 0 0 1-2 0 1.476 1.476 0 0 1 .045-.206c.039-.131.1-.294.183-.483.166-.378.396-.808.637-1.223L8 9.858l.135.23c.241.415.47.845.637 1.223.083.19.144.352.183.484A1.338 1.338 0 0 1 9 12zm3.33-6.5a1 1 0 0 1-.366 1.366 1.478 1.478 0 0 1-.2.064c-.134.032-.305.06-.51.083-.412.045-.898.061-1.379.06-.09 0-.178 0-.266-.002l.131-.232c.24-.416.497-.83.742-1.163a4.1 4.1 0 0 1 .327-.4c.046-.05.085-.086.114-.11.026-.022.04-.03.041-.032a1 1 0 0 1 1.366.366zm-1.366 5.366a1.494 1.494 0 0 1-.155-.141 4.225 4.225 0 0 1-.327-.4A12.88 12.88 0 0 1 9.74 9.16a22 22 0 0 1-.13-.232l.265-.002c.48-.001.967.015 1.379.06.205.023.376.051.51.083.066.016.116.031.153.044l.048.02a1 1 0 1 1-1 1.732zM8 9a1 1 0 1 1 0-2 1 1 0 0 1 0 2z" />
5
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"
2
+ viewBox="0 0 16 16">
3
+ <path fill="white" stroke="pink"
4
+ d="M11.424 8c.437-.052.811-.136 1.04-.268a2 2 0 0 0-2-3.464c-.229.132-.489.414-.752.767C9.886 4.63 10 4.264 10 4a2 2 0 1 0-4 0c0 .264.114.63.288 1.035-.263-.353-.523-.635-.752-.767a2 2 0 0 0-2 3.464c.229.132.603.216 1.04.268-.437.052-.811.136-1.04.268a2 2 0 1 0 2 3.464c.229-.132.489-.414.752-.767C6.114 11.37 6 11.736 6 12a2 2 0 1 0 4 0c0-.264-.114-.63-.288-1.035.263.353.523.635.752.767a2 2 0 1 0 2-3.464c-.229-.132-.603-.216-1.04-.268zM9 4a1.468 1.468 0 0 1-.045.205c-.039.132-.1.295-.183.484a12.88 12.88 0 0 1-.637 1.223L8 6.142a21.73 21.73 0 0 1-.135-.23 12.88 12.88 0 0 1-.637-1.223 4.216 4.216 0 0 1-.183-.484A1.473 1.473 0 0 1 7 4a1 1 0 1 1 2 0zM3.67 5.5a1 1 0 0 1 1.366-.366 1.472 1.472 0 0 1 .156.142c.094.1.204.233.326.4.245.333.502.747.742 1.163l.13.232a21.86 21.86 0 0 1-.265.002 12.88 12.88 0 0 1-1.379-.06 4.214 4.214 0 0 1-.51-.083 1.47 1.47 0 0 1-.2-.064A1 1 0 0 1 3.67 5.5zm1.366 5.366a1 1 0 0 1-1-1.732c.001 0 .016-.008.047-.02.037-.013.087-.028.153-.044.134-.032.305-.06.51-.083a12.88 12.88 0 0 1 1.379-.06c.09 0 .178 0 .266.002a21.82 21.82 0 0 1-.131.232c-.24.416-.497.83-.742 1.163a4.1 4.1 0 0 1-.327.4 1.483 1.483 0 0 1-.155.142zM9 12a1 1 0 0 1-2 0 1.476 1.476 0 0 1 .045-.206c.039-.131.1-.294.183-.483.166-.378.396-.808.637-1.223L8 9.858l.135.23c.241.415.47.845.637 1.223.083.19.144.352.183.484A1.338 1.338 0 0 1 9 12zm3.33-6.5a1 1 0 0 1-.366 1.366 1.478 1.478 0 0 1-.2.064c-.134.032-.305.06-.51.083-.412.045-.898.061-1.379.06-.09 0-.178 0-.266-.002l.131-.232c.24-.416.497-.83.742-1.163a4.1 4.1 0 0 1 .327-.4c.046-.05.085-.086.114-.11.026-.022.04-.03.041-.032a1 1 0 0 1 1.366.366zm-1.366 5.366a1.494 1.494 0 0 1-.155-.141 4.225 4.225 0 0 1-.327-.4A12.88 12.88 0 0 1 9.74 9.16a22 22 0 0 1-.13-.232l.265-.002c.48-.001.967.015 1.379.06.205.023.376.051.51.083.066.016.116.031.153.044l.048.02a1 1 0 1 1-1 1.732zM8 9a1 1 0 1 1 0-2 1 1 0 0 1 0 2z" />
5
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"
2
+ viewBox="0 0 16 16">
3
+ <path fill="white" stroke="red"
4
+ d="M11.424 8c.437-.052.811-.136 1.04-.268a2 2 0 0 0-2-3.464c-.229.132-.489.414-.752.767C9.886 4.63 10 4.264 10 4a2 2 0 1 0-4 0c0 .264.114.63.288 1.035-.263-.353-.523-.635-.752-.767a2 2 0 0 0-2 3.464c.229.132.603.216 1.04.268-.437.052-.811.136-1.04.268a2 2 0 1 0 2 3.464c.229-.132.489-.414.752-.767C6.114 11.37 6 11.736 6 12a2 2 0 1 0 4 0c0-.264-.114-.63-.288-1.035.263.353.523.635.752.767a2 2 0 1 0 2-3.464c-.229-.132-.603-.216-1.04-.268zM9 4a1.468 1.468 0 0 1-.045.205c-.039.132-.1.295-.183.484a12.88 12.88 0 0 1-.637 1.223L8 6.142a21.73 21.73 0 0 1-.135-.23 12.88 12.88 0 0 1-.637-1.223 4.216 4.216 0 0 1-.183-.484A1.473 1.473 0 0 1 7 4a1 1 0 1 1 2 0zM3.67 5.5a1 1 0 0 1 1.366-.366 1.472 1.472 0 0 1 .156.142c.094.1.204.233.326.4.245.333.502.747.742 1.163l.13.232a21.86 21.86 0 0 1-.265.002 12.88 12.88 0 0 1-1.379-.06 4.214 4.214 0 0 1-.51-.083 1.47 1.47 0 0 1-.2-.064A1 1 0 0 1 3.67 5.5zm1.366 5.366a1 1 0 0 1-1-1.732c.001 0 .016-.008.047-.02.037-.013.087-.028.153-.044.134-.032.305-.06.51-.083a12.88 12.88 0 0 1 1.379-.06c.09 0 .178 0 .266.002a21.82 21.82 0 0 1-.131.232c-.24.416-.497.83-.742 1.163a4.1 4.1 0 0 1-.327.4 1.483 1.483 0 0 1-.155.142zM9 12a1 1 0 0 1-2 0 1.476 1.476 0 0 1 .045-.206c.039-.131.1-.294.183-.483.166-.378.396-.808.637-1.223L8 9.858l.135.23c.241.415.47.845.637 1.223.083.19.144.352.183.484A1.338 1.338 0 0 1 9 12zm3.33-6.5a1 1 0 0 1-.366 1.366 1.478 1.478 0 0 1-.2.064c-.134.032-.305.06-.51.083-.412.045-.898.061-1.379.06-.09 0-.178 0-.266-.002l.131-.232c.24-.416.497-.83.742-1.163a4.1 4.1 0 0 1 .327-.4c.046-.05.085-.086.114-.11.026-.022.04-.03.041-.032a1 1 0 0 1 1.366.366zm-1.366 5.366a1.494 1.494 0 0 1-.155-.141 4.225 4.225 0 0 1-.327-.4A12.88 12.88 0 0 1 9.74 9.16a22 22 0 0 1-.13-.232l.265-.002c.48-.001.967.015 1.379.06.205.023.376.051.51.083.066.016.116.031.153.044l.048.02a1 1 0 1 1-1 1.732zM8 9a1 1 0 1 1 0-2 1 1 0 0 1 0 2z" />
5
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"
2
+ viewBox="0 0 16 16">
3
+ <path
4
+ d="M11.424 8c.437-.052.811-.136 1.04-.268a2 2 0 0 0-2-3.464c-.229.132-.489.414-.752.767C9.886 4.63 10 4.264 10 4a2 2 0 1 0-4 0c0 .264.114.63.288 1.035-.263-.353-.523-.635-.752-.767a2 2 0 0 0-2 3.464c.229.132.603.216 1.04.268-.437.052-.811.136-1.04.268a2 2 0 1 0 2 3.464c.229-.132.489-.414.752-.767C6.114 11.37 6 11.736 6 12a2 2 0 1 0 4 0c0-.264-.114-.63-.288-1.035.263.353.523.635.752.767a2 2 0 1 0 2-3.464c-.229-.132-.603-.216-1.04-.268zM9 4a1.468 1.468 0 0 1-.045.205c-.039.132-.1.295-.183.484a12.88 12.88 0 0 1-.637 1.223L8 6.142a21.73 21.73 0 0 1-.135-.23 12.88 12.88 0 0 1-.637-1.223 4.216 4.216 0 0 1-.183-.484A1.473 1.473 0 0 1 7 4a1 1 0 1 1 2 0zM3.67 5.5a1 1 0 0 1 1.366-.366 1.472 1.472 0 0 1 .156.142c.094.1.204.233.326.4.245.333.502.747.742 1.163l.13.232a21.86 21.86 0 0 1-.265.002 12.88 12.88 0 0 1-1.379-.06 4.214 4.214 0 0 1-.51-.083 1.47 1.47 0 0 1-.2-.064A1 1 0 0 1 3.67 5.5zm1.366 5.366a1 1 0 0 1-1-1.732c.001 0 .016-.008.047-.02.037-.013.087-.028.153-.044.134-.032.305-.06.51-.083a12.88 12.88 0 0 1 1.379-.06c.09 0 .178 0 .266.002a21.82 21.82 0 0 1-.131.232c-.24.416-.497.83-.742 1.163a4.1 4.1 0 0 1-.327.4 1.483 1.483 0 0 1-.155.142zM9 12a1 1 0 0 1-2 0 1.476 1.476 0 0 1 .045-.206c.039-.131.1-.294.183-.483.166-.378.396-.808.637-1.223L8 9.858l.135.23c.241.415.47.845.637 1.223.083.19.144.352.183.484A1.338 1.338 0 0 1 9 12zm3.33-6.5a1 1 0 0 1-.366 1.366 1.478 1.478 0 0 1-.2.064c-.134.032-.305.06-.51.083-.412.045-.898.061-1.379.06-.09 0-.178 0-.266-.002l.131-.232c.24-.416.497-.83.742-1.163a4.1 4.1 0 0 1 .327-.4c.046-.05.085-.086.114-.11.026-.022.04-.03.041-.032a1 1 0 0 1 1.366.366zm-1.366 5.366a1.494 1.494 0 0 1-.155-.141 4.225 4.225 0 0 1-.327-.4A12.88 12.88 0 0 1 9.74 9.16a22 22 0 0 1-.13-.232l.265-.002c.48-.001.967.015 1.379.06.205.023.376.051.51.083.066.016.116.031.153.044l.048.02a1 1 0 1 1-1 1.732zM8 9a1 1 0 1 1 0-2 1 1 0 0 1 0 2z" />
5
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"
2
+ viewBox="0 0 16 16">
3
+ <path fill="white" stroke="yellow"
4
+ d="M11.424 8c.437-.052.811-.136 1.04-.268a2 2 0 0 0-2-3.464c-.229.132-.489.414-.752.767C9.886 4.63 10 4.264 10 4a2 2 0 1 0-4 0c0 .264.114.63.288 1.035-.263-.353-.523-.635-.752-.767a2 2 0 0 0-2 3.464c.229.132.603.216 1.04.268-.437.052-.811.136-1.04.268a2 2 0 1 0 2 3.464c.229-.132.489-.414.752-.767C6.114 11.37 6 11.736 6 12a2 2 0 1 0 4 0c0-.264-.114-.63-.288-1.035.263.353.523.635.752.767a2 2 0 1 0 2-3.464c-.229-.132-.603-.216-1.04-.268zM9 4a1.468 1.468 0 0 1-.045.205c-.039.132-.1.295-.183.484a12.88 12.88 0 0 1-.637 1.223L8 6.142a21.73 21.73 0 0 1-.135-.23 12.88 12.88 0 0 1-.637-1.223 4.216 4.216 0 0 1-.183-.484A1.473 1.473 0 0 1 7 4a1 1 0 1 1 2 0zM3.67 5.5a1 1 0 0 1 1.366-.366 1.472 1.472 0 0 1 .156.142c.094.1.204.233.326.4.245.333.502.747.742 1.163l.13.232a21.86 21.86 0 0 1-.265.002 12.88 12.88 0 0 1-1.379-.06 4.214 4.214 0 0 1-.51-.083 1.47 1.47 0 0 1-.2-.064A1 1 0 0 1 3.67 5.5zm1.366 5.366a1 1 0 0 1-1-1.732c.001 0 .016-.008.047-.02.037-.013.087-.028.153-.044.134-.032.305-.06.51-.083a12.88 12.88 0 0 1 1.379-.06c.09 0 .178 0 .266.002a21.82 21.82 0 0 1-.131.232c-.24.416-.497.83-.742 1.163a4.1 4.1 0 0 1-.327.4 1.483 1.483 0 0 1-.155.142zM9 12a1 1 0 0 1-2 0 1.476 1.476 0 0 1 .045-.206c.039-.131.1-.294.183-.483.166-.378.396-.808.637-1.223L8 9.858l.135.23c.241.415.47.845.637 1.223.083.19.144.352.183.484A1.338 1.338 0 0 1 9 12zm3.33-6.5a1 1 0 0 1-.366 1.366 1.478 1.478 0 0 1-.2.064c-.134.032-.305.06-.51.083-.412.045-.898.061-1.379.06-.09 0-.178 0-.266-.002l.131-.232c.24-.416.497-.83.742-1.163a4.1 4.1 0 0 1 .327-.4c.046-.05.085-.086.114-.11.026-.022.04-.03.041-.032a1 1 0 0 1 1.366.366zm-1.366 5.366a1.494 1.494 0 0 1-.155-.141 4.225 4.225 0 0 1-.327-.4A12.88 12.88 0 0 1 9.74 9.16a22 22 0 0 1-.13-.232l.265-.002c.48-.001.967.015 1.379.06.205.023.376.051.51.083.066.016.116.031.153.044l.048.02a1 1 0 1 1-1 1.732zM8 9a1 1 0 1 1 0-2 1 1 0 0 1 0 2z" />
5
+ </svg>
@@ -91,6 +91,12 @@ div.grid {
91
91
  column-gap: 2rem;
92
92
  }
93
93
 
94
+ div.grid.borders>div.section {
95
+ border: solid 1px;
96
+ border-radius: 3%;
97
+ padding: .5rem;
98
+ }
99
+
94
100
  div.wrapper {
95
101
  display: flex;
96
102
  flex-wrap: wrap;
@@ -32,9 +32,9 @@ class EBook {
32
32
  this.#createPackageFile();
33
33
 
34
34
  // Copy assets
35
- const cssDirTarget = contentDir + "/css";
36
- fs.mkdirSync( cssDirTarget, { recursive: true } );
37
- fs.cpSync( Config.getPackageDir() + "/ebook/css", cssDirTarget, { recursive: true } );
35
+ // const cssDirTarget = contentDir + "/css";
36
+ // fs.mkdirSync( cssDirTarget, { recursive: true } );
37
+ fs.cpSync( Config.getPackageDir() + "/ebook", contentDir, { recursive: true } );
38
38
 
39
39
  this.createZip();
40
40
 
@@ -17,6 +17,10 @@ class EBookPage {
17
17
  fs.writeFileSync( this.#fileName, html );
18
18
  }
19
19
 
20
+ getTitle() {
21
+ return this.#title;
22
+ }
23
+
20
24
  #renderBodyStart() {
21
25
  return "<body>";
22
26
  }
@@ -0,0 +1,27 @@
1
+ import { EBookPage } from "../ebookpage.js";
2
+ import { XHTML } from "../xhtml.js";
3
+ import { Families } from "../../families.js";
4
+
5
+ class PageListFamilies extends EBookPage {
6
+
7
+ constructor( outputDir ) {
8
+ super( outputDir + "/list_families.html", "All Families" );
9
+ }
10
+
11
+ renderPageBody() {
12
+
13
+ const html = XHTML.textElement( "h1", this.getTitle() );
14
+
15
+ const links = [];
16
+ for ( const family of Families.getFamilies() ) {
17
+ if ( !family.getTaxa() ) {
18
+ continue;
19
+ }
20
+ links.push( XHTML.getLink( family.getFileName(), family.getName() ) );
21
+ }
22
+
23
+ return html + XHTML.wrap( "ol", XHTML.arrayToLI( links ) );
24
+ }
25
+ }
26
+
27
+ export { PageListFamilies };
@@ -0,0 +1,26 @@
1
+ import { EBookPage } from "../ebookpage.js";
2
+ import { XHTML } from "../xhtml.js";
3
+
4
+ class PageListFlowerColor extends EBookPage {
5
+
6
+ #color;
7
+
8
+ constructor( outputDir, color ) {
9
+ super( outputDir + "/" + color.getFileName(), color.getColorName( true ) + " Flowers" );
10
+ this.#color = color;
11
+ }
12
+
13
+ renderPageBody() {
14
+
15
+ const html = XHTML.textElement( "h1", this.getTitle() );
16
+
17
+ const links = [];
18
+ for ( const taxon of this.#color.getTaxa() ) {
19
+ links.push( XHTML.getLink( taxon.getFileName(), taxon.getName() ) );
20
+ }
21
+
22
+ return html + XHTML.wrap( "ol", XHTML.arrayToLI( links ) );
23
+ }
24
+ }
25
+
26
+ export { PageListFlowerColor };
@@ -0,0 +1,26 @@
1
+ import { EBookPage } from "../ebookpage.js";
2
+ import { XHTML } from "../xhtml.js";
3
+
4
+ class PageListSpecies extends EBookPage {
5
+
6
+ #taxa;
7
+
8
+ constructor( outputDir, taxa, filename, title ) {
9
+ super( outputDir + "/" + filename, title );
10
+ this.#taxa = taxa;
11
+ }
12
+
13
+ renderPageBody() {
14
+
15
+ const html = XHTML.textElement( "h1", this.getTitle() );
16
+
17
+ const links = [];
18
+ for ( const taxon of this.#taxa ) {
19
+ links.push( XHTML.getLink( taxon.getFileName(), taxon.getName() ) );
20
+ }
21
+
22
+ return html + XHTML.wrap( "ol", XHTML.arrayToLI( links ) );
23
+ }
24
+ }
25
+
26
+ export { PageListSpecies };
@@ -25,7 +25,8 @@ class TaxonPage extends EBookPage {
25
25
  }
26
26
  let html = "";
27
27
  for ( const color of colors ) {
28
- html += XHTML.textElement( "span", "", { class: "color " + color } );
28
+ // html += XHTML.textElement( "span", "", { class: "color " + color } );
29
+ html += XHTML.textElement( "img", "", { src: "./i/f-" + color + ".svg", class: "flr" } );
29
30
  }
30
31
  return html;
31
32
  }
@@ -45,7 +46,8 @@ class TaxonPage extends EBookPage {
45
46
  const name = this.#taxon.getName();
46
47
  let html = XHTML.textElement( "h1", name );
47
48
 
48
- html += XHTML.textElement( "div", this.#taxon.getFamily().getName() );
49
+ const family = this.#taxon.getFamily();
50
+ html += XHTML.wrap( "div", XHTML.getLink( family.getFileName(), family.getName() ) );
49
51
 
50
52
  const cn = this.#taxon.getCommonNames();
51
53
  if ( cn && cn.length > 0 ) {
@@ -1,30 +1,37 @@
1
- import { HTML } from "@ca-plant-list/ca-plant-list";
2
1
  import { EBookPage } from "../ebookpage.js";
2
+ import { XHTML } from "../xhtml.js";
3
+ import { FLOWER_COLOR_NAMES } from "../../taxa.js";
3
4
 
4
5
  class TOCPage extends EBookPage {
5
6
 
6
- #taxa;
7
-
8
- constructor( outputDir, taxa ) {
7
+ constructor( outputDir ) {
9
8
  super( outputDir + "/toc.xhtml", "Table of Contents" );
10
- this.#taxa = taxa;
11
9
  }
12
10
 
13
11
  renderPageBody() {
14
12
 
15
13
  let html = "<nav id=\"toc\" role=\"doc-toc\" epub:type=\"toc\">";
16
- html += "<h2 epub:type=\"title\">Table of Contents</h2>";
14
+ html += "<h1 epub:type=\"title\">Table of Contents</h1>";
17
15
 
18
- html += "<ol>";
19
- for ( const taxon of this.#taxa ) {
20
- html += "<li>" + HTML.getLink( "./" + taxon.getFileName(), taxon.getName() ) + "</li>";
21
- }
22
- html += "</ol>";
16
+ const mainLinks = [];
17
+ mainLinks.push( this.#getFlowerColorLinks() );
18
+ mainLinks.push( XHTML.getLink( "./list_families.html", "All Families" ) );
19
+ mainLinks.push( XHTML.getLink( "./list_species.html", "All Species" ) );
20
+ html += XHTML.wrap( "ol", XHTML.arrayToLI( mainLinks ) );
23
21
 
24
22
  html += "</nav>";
25
23
 
26
24
  return html;
27
25
  }
26
+
27
+ #getFlowerColorLinks() {
28
+ const html = XHTML.textElement( "span", "Flower Color" );
29
+ const links = [];
30
+ for ( const colorName of FLOWER_COLOR_NAMES ) {
31
+ links.push( XHTML.getLink( "list_fc_" + colorName + ".html", colorName ) );
32
+ }
33
+ return html + XHTML.wrap( "ol", XHTML.arrayToLI( links ) );
34
+ }
28
35
  }
29
36
 
30
37
  export { TOCPage };
@@ -4,9 +4,13 @@ import sharp from "sharp";
4
4
  import { CSV, Families, Files, Taxa } from "@ca-plant-list/ca-plant-list";
5
5
  import { EBook } from "./ebook.js";
6
6
  import { Image } from "./image.js";
7
+ import { PageListFamilies } from "./pages/page_list_families.js";
8
+ import { PageListFlowerColor } from "./pages/page_list_flower_color.js";
9
+ import { PageListSpecies } from "./pages/page_list_species.js";
7
10
  import { TaxonPage } from "./pages/taxonpage.js";
8
11
  import { TOCPage } from "./pages/tocpage.js";
9
12
  import { Config } from "../config.js";
13
+ import { FLOWER_COLOR_NAMES } from "../taxa.js";
10
14
 
11
15
  class PlantBook extends EBook {
12
16
 
@@ -21,29 +25,38 @@ class PlantBook extends EBook {
21
25
  Config.getConfigValue( "ebook", "title" )
22
26
  );
23
27
 
24
- Families.init();
25
-
26
28
  }
27
29
 
28
30
  async createPages() {
31
+
32
+ console.log( "checking images" );
29
33
  await this.#importImages();
30
34
 
31
35
  const contentDir = this.getContentDir();
36
+
37
+ console.log( "creating taxon pages" );
32
38
  const taxa = Taxa.getTaxa();
33
39
  for ( const taxon of taxa ) {
34
40
  const name = taxon.getName();
35
41
  new TaxonPage( contentDir, taxon, this.#images[ name ] ).create();
36
42
  }
37
- new TOCPage( contentDir, taxa ).create();
38
- }
39
43
 
40
- #getMapEntry( map, key, initialValue ) {
41
- const value = map[ key ];
42
- if ( value ) {
43
- return value;
44
+ // Create lists.
45
+ for ( const colorName of FLOWER_COLOR_NAMES ) {
46
+ new PageListFlowerColor( contentDir, Taxa.getFlowerColor( colorName ) ).create();
44
47
  }
45
- map[ key ] = initialValue;
46
- return initialValue;
48
+ new PageListFamilies( contentDir ).create();
49
+ for ( const family of Families.getFamilies() ) {
50
+ const taxa = family.getTaxa();
51
+ if ( !taxa ) {
52
+ continue;
53
+ }
54
+ const name = family.getName();
55
+ new PageListSpecies( contentDir, taxa, name + ".html", name ).create();
56
+ }
57
+ new PageListSpecies( contentDir, taxa, "list_species.html", "All Species" ).create();
58
+
59
+ new TOCPage( contentDir ).create();
47
60
  }
48
61
 
49
62
  async #importImages() {
@@ -90,8 +103,33 @@ class PlantBook extends EBook {
90
103
  }
91
104
 
92
105
  renderManifestEntries() {
106
+
93
107
  let xml = "";
94
108
 
109
+ xml += "<item id=\"f0\" href=\"i/f-blue.svg\" media-type=\"image/svg+xml\" />";
110
+ xml += "<item id=\"f1\" href=\"i/f-orange.svg\" media-type=\"image/svg+xml\" />";
111
+ xml += "<item id=\"f2\" href=\"i/f-pink.svg\" media-type=\"image/svg+xml\" />";
112
+ xml += "<item id=\"f3\" href=\"i/f-red.svg\" media-type=\"image/svg+xml\" />";
113
+ xml += "<item id=\"f4\" href=\"i/f-white.svg\" media-type=\"image/svg+xml\" />";
114
+ xml += "<item id=\"f5\" href=\"i/f-yellow.svg\" media-type=\"image/svg+xml\" />";
115
+
116
+ // Add lists.
117
+ xml += "<item id=\"lspecies\" href=\"list_species.html\" media-type=\"application/xhtml+xml\" />";
118
+ xml += "<item id=\"lfamilies\" href=\"list_families.html\" media-type=\"application/xhtml+xml\" />";
119
+ for ( const colorName of FLOWER_COLOR_NAMES ) {
120
+ const color = Taxa.getFlowerColor( colorName );
121
+ xml += "<item id=\"l" + color.getColorName() + "\" href=\"" + color.getFileName() + "\" media-type=\"application/xhtml+xml\" />";
122
+ }
123
+
124
+ // Add family pages.
125
+ for ( const family of Families.getFamilies() ) {
126
+ const taxa = family.getTaxa();
127
+ if ( !taxa ) {
128
+ continue;
129
+ }
130
+ xml += "<item id=\"fam" + family.getName() + "\" href=\"" + family.getFileName() + "\" media-type=\"application/xhtml+xml\" />";
131
+ }
132
+
95
133
  // Add taxon pages.
96
134
  const taxa = Taxa.getTaxa();
97
135
  for ( let index = 0; index < taxa.length; index++ ) {
@@ -112,6 +150,25 @@ class PlantBook extends EBook {
112
150
 
113
151
  renderSpineElements() {
114
152
  let xml = "";
153
+
154
+ // Add lists.
155
+ for ( const colorName of FLOWER_COLOR_NAMES ) {
156
+ const color = Taxa.getFlowerColor( colorName );
157
+ xml += "<itemref idref=\"l" + color.getColorName() + "\"/>";
158
+ }
159
+ xml += "<itemref idref=\"lfamilies\"/>";
160
+ xml += "<itemref idref=\"lspecies\"/>";
161
+
162
+ // Add families.
163
+ for ( const family of Families.getFamilies() ) {
164
+ const taxa = family.getTaxa();
165
+ if ( !taxa ) {
166
+ continue;
167
+ }
168
+ xml += "<itemref idref=\"fam" + family.getName() + "\"/>";
169
+ }
170
+
171
+ // Add taxa.
115
172
  for ( let index = 0; index < Taxa.getTaxa().length; index++ ) {
116
173
  xml += "<itemref idref=\"t" + index + "\"/>";
117
174
  }
package/lib/exceptions.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { Config } from "./config.js";
1
2
  import { Files } from "./files.js";
2
3
 
3
4
  class Exceptions {
@@ -32,11 +33,20 @@ class Exceptions {
32
33
  }
33
34
 
34
35
  static init( dir ) {
35
- try {
36
- this.#exceptions = JSON.parse( Files.read( dir + "/exceptions.json" ) );
37
- } catch ( e ) {
38
- console.log( e );
36
+
37
+ function readConfig( fileName ) {
38
+ return JSON.parse( Files.read( fileName ) );
39
39
  }
40
+
41
+ // Read default configuration.
42
+ this.#exceptions = readConfig( Config.getPackageDir() + "/data/exceptions.json" );
43
+
44
+ // Add/overwrite with local configuration.
45
+ const localExceptions = readConfig( dir + "/exceptions.json" );
46
+ for ( const [ k, v ] of Object.entries( localExceptions ) ) {
47
+ this.#exceptions[ k ] = v;
48
+ }
49
+
40
50
  }
41
51
 
42
52
  }
package/lib/families.js CHANGED
@@ -10,6 +10,10 @@ class Families {
10
10
 
11
11
  static #families;
12
12
 
13
+ static getFamilies() {
14
+ return Object.values( this.#families ).sort( ( a, b ) => a.getName().localeCompare( b.getName() ) );
15
+ }
16
+
13
17
  static getFamily( familyName ) {
14
18
  return this.#families[ familyName ];
15
19
  }
package/lib/index.d.ts CHANGED
@@ -33,14 +33,15 @@ export class ErrorLog {
33
33
  static write(fileName: any): void;
34
34
  }
35
35
  export class Exceptions {
36
- static "__#16@#exceptions": {};
36
+ static "__#17@#exceptions": {};
37
37
  static getExceptions(): [string, any][];
38
38
  static getValue(name: any, cat: any, subcat: any, defaultValue: any): any;
39
39
  static hasException(name: any, cat: any, subcat: any): boolean;
40
40
  static init(dir: any): void;
41
41
  }
42
42
  export class Families {
43
- static "__#10@#families": any;
43
+ static "__#11@#families": any;
44
+ static getFamilies(): any[];
44
45
  static getFamily(familyName: any): any;
45
46
  static init(): void;
46
47
  static renderPages(outputDir: any, taxaColumns: any): void;
@@ -154,18 +155,21 @@ export class RarePlants {
154
155
  static getRPIRankDescription(rank: any): any;
155
156
  static getRPIRankAndThreatDescriptions(rank: any): any[];
156
157
  }
158
+ export const FLOWER_COLOR_NAMES: string[];
157
159
  export class Taxa {
158
- static "__#9@#taxa": {};
159
- static "__#9@#sortedTaxa": any;
160
+ static "__#10@#taxa": {};
161
+ static "__#10@#flower_colors": {};
162
+ static "__#10@#sortedTaxa": any;
160
163
  static getHTMLTable(taxa: any, columns?: {
161
164
  title: string;
162
165
  data: (t: any) => any;
163
166
  }[]): string;
167
+ static getFlowerColor(name: any): any;
164
168
  static getTaxa(): any;
165
169
  static getTaxon(name: any): any;
166
170
  static init(inclusionList: any, taxaMeta?: {}, taxonClass?: typeof Taxon, extraTaxa?: any[], extraSynonyms?: any[]): void;
167
- static "__#9@#loadSyns"(synCSV: any, inclusionList: any): void;
168
- static "__#9@#loadTaxa"(taxaCSV: any, inclusionList: any, taxaMeta: any, taxonClass: any): void;
171
+ static "__#10@#loadSyns"(synCSV: any, inclusionList: any): void;
172
+ static "__#10@#loadTaxa"(taxaCSV: any, inclusionList: any, taxaMeta: any, taxonClass: any): void;
169
173
  }
170
174
  export namespace TAXA_LIST_COLS {
171
175
  namespace CESA {
package/lib/pagetaxon.js CHANGED
@@ -153,8 +153,8 @@ class PageTaxon extends GenericPage {
153
153
 
154
154
  html += "</div>";
155
155
 
156
- html += "<div class=\"grid\">";
157
- html += this.#getListSectionHTML( this.#getInfoLinks(), "Information", "info" );
156
+ html += "<div class=\"grid borders\">";
157
+ html += this.#getListSectionHTML( this.#getInfoLinks(), "References", "info" );
158
158
  html += this.#getListSectionHTML( this.#getObsLinks(), "Observations", "obs" );
159
159
  html += this.#getListSectionHTML( this.#getRelatedTaxaLinks(), "Related Species", "rel-taxa" );
160
160
  html += this.#getListSectionHTML( this.#getSynonyms(), "Synonyms", "synonyms" );
package/lib/taxa.js CHANGED
@@ -5,6 +5,8 @@ import { HTML } from "./html.js";
5
5
  import { CSV } from "./csv.js";
6
6
  import { RarePlants } from "./rareplants.js";
7
7
 
8
+ const FLOWER_COLOR_NAMES = [ "white", "red", "pink", "orange", "yellow", "blue" ];
9
+
8
10
  const TAXA_LIST_COLS = {
9
11
  CESA: {
10
12
  title: "California",
@@ -34,11 +36,45 @@ const TAXA_LIST_COLS = {
34
36
 
35
37
  const DEFAULT_COLUMNS = [ TAXA_LIST_COLS.SPECIES, TAXA_LIST_COLS.COMMON_NAME ];
36
38
 
39
+ class FlowerColor {
40
+
41
+ #color;
42
+ #taxa = [];
43
+
44
+ constructor( color ) {
45
+ this.#color = color;
46
+ }
47
+
48
+ addTaxon( taxon ) {
49
+ this.#taxa.push( taxon );
50
+ }
51
+
52
+ getColorName( uc = false ) {
53
+ return uc ? ( this.#color[ 0 ].toUpperCase() + this.#color.substring( 1 ) ) : this.#color;
54
+ }
55
+
56
+ getFileName() {
57
+ return "list_fc_" + this.#color + ".html";
58
+ }
59
+
60
+ getTaxa() {
61
+ return this.#taxa;
62
+ }
63
+
64
+ }
65
+
37
66
  class Taxa {
38
67
 
39
68
  static #taxa = {};
69
+ static #flower_colors = {};
40
70
  static #sortedTaxa;
41
71
 
72
+ static {
73
+ for ( const color of FLOWER_COLOR_NAMES ) {
74
+ this.#flower_colors[ color ] = new FlowerColor( color );
75
+ }
76
+ }
77
+
42
78
  static getHTMLTable( taxa, columns = DEFAULT_COLUMNS ) {
43
79
 
44
80
  let html = "<table><thead>";
@@ -67,6 +103,10 @@ class Taxa {
67
103
  return html;
68
104
  }
69
105
 
106
+ static getFlowerColor( name ) {
107
+ return this.#flower_colors[ name ];
108
+ }
109
+
70
110
  static getTaxa() {
71
111
  return this.#sortedTaxa;
72
112
  }
@@ -134,7 +174,18 @@ class Taxa {
134
174
  if ( status !== undefined ) {
135
175
  row[ "status" ] = status;
136
176
  }
137
- this.#taxa[ name ] = new taxonClass( row, taxaMeta[ name ] );
177
+ const taxon = new taxonClass( row, taxaMeta[ name ] );
178
+ this.#taxa[ name ] = taxon;
179
+ const colors = taxon.getFlowerColors();
180
+ if ( colors ) {
181
+ for ( const colorName of colors ) {
182
+ const color = this.#flower_colors[ colorName ];
183
+ if ( !color ) {
184
+ throw new Error( "flower color \"" + colorName + "\" not found" );
185
+ }
186
+ color.addTaxon( taxon );
187
+ }
188
+ }
138
189
 
139
190
  }
140
191
 
@@ -143,4 +194,4 @@ class Taxa {
143
194
 
144
195
  }
145
196
 
146
- export { Taxa, TAXA_LIST_COLS };
197
+ export { FLOWER_COLOR_NAMES, Taxa, TAXA_LIST_COLS };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ca-plant-list/ca-plant-list",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Tools to create Jekyll files for a website listing plants in an area of California.",
5
5
  "license": "MIT",
6
6
  "repository": {