@ca-plant-list/ca-plant-list 0.4.30 → 0.4.32
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.
- package/data/inatobsphotos.csv +9318 -9281
- package/data/inattaxonphotos.csv +471 -80
- package/data/synonyms.csv +4 -0
- package/data/taxa.csv +20 -18
- package/data/text/Brodiaea-elegans-subsp-elegans.md +1 -0
- package/data/text/Brodiaea-terrestris-subsp-terrestris.md +1 -0
- package/lib/externalsites.js +15 -9
- package/lib/htmltaxon.js +44 -1
- package/lib/photo.js +6 -4
- package/lib/taxonomy/taxa.js +3 -22
- package/lib/tools/inat.js +33 -4
- package/lib/utils/inat-tools.js +211 -43
- package/package.json +1 -1
- package/scripts/cpl-photos.js +334 -62
package/data/synonyms.csv
CHANGED
@@ -89,10 +89,12 @@ Amerosedum radiatum,Sedum radiatum
|
|
89
89
|
Amerosedum radiatum subsp. radiatum,Sedum radiatum subsp. radiatum
|
90
90
|
Ammannia coccinea subsp. purpurea,Ammannia coccinea
|
91
91
|
Amsinckia gloriosa,Amsinckia tessellata var. gloriosa
|
92
|
+
Amsinckia helleri,Amsinckia retrorsa
|
92
93
|
Amsinckia intermedia var. eastwoodiae,Amsinckia eastwoodiae
|
93
94
|
Amsinckia intermedia var. echinata,Amsinckia intermedia
|
94
95
|
Amsinckia menziesii var. intermedia,Amsinckia intermedia,INAT
|
95
96
|
Amsinckia menziesii var. menziesii,Amsinckia menziesii
|
97
|
+
Amsinckia menziesii var. menziesii,Amsinckia retrorsa,INAT
|
96
98
|
Amsinckia micrantha,Amsinckia menziesii
|
97
99
|
Amsinckia straminea,Amsinckia lycopsoides
|
98
100
|
Amsinckia tessellata var. elegans,Amsinckia tessellata var. tessellata
|
@@ -684,6 +686,7 @@ Erigeron peregrinus var. callianthemus,Erigeron glacialis var. glacialis
|
|
684
686
|
Eriocoma lemmonii subsp. lemmonii,Stipa lemmonii var. lemmonii,INAT
|
685
687
|
Eriogonella membranacea,Chorizanthe membranacea
|
686
688
|
Eriogonum acetoselloides,Eriogonum gracile var. gracile
|
689
|
+
Eriogonum arachnoideum,Eriogonum latifolium
|
687
690
|
Eriogonum auriculatum,Eriogonum nudum var. auriculatum
|
688
691
|
Eriogonum caninum,Eriogonum luteolum var. caninum
|
689
692
|
Eriogonum curvatum,Eriogonum wrightii var. subscaposum
|
@@ -704,6 +707,7 @@ Eriogonum lobbii var. minus,Eriogonum lobbii
|
|
704
707
|
Eriogonum marifolium var. incanum,Eriogonum incanum
|
705
708
|
Eriogonum nivale,Eriogonum ovalifolium var. nivale
|
706
709
|
Eriogonum nudum subsp. pauciflorum,Eriogonum nudum var. pauciflorum
|
710
|
+
Eriogonum oblongifolium,Eriogonum latifolium
|
707
711
|
Eriogonum polifolium,Eriogonum fasciculatum var. polifolium
|
708
712
|
Eriogonum polyanthum var. bahiiforme,Eriogonum umbellatum var. bahiiforme
|
709
713
|
Eriogonum revolutum,Eriogonum fasciculatum var. polifolium
|
package/data/taxa.csv
CHANGED
@@ -94,7 +94,8 @@ Amsinckia grandiflora,large-flowered fiddleneck,N,13130,323,75424,202030,,Large-
|
|
94
94
|
Amsinckia intermedia,fiddleneck,N,13131,11324,49141,202031,,Common Fiddleneck
|
95
95
|
Amsinckia lunaris,bent-flower fiddleneck,N,13139,324,75425,202032,,Bent Flowered Fiddleneck,,,,,5,1B.2,,,S3,G3
|
96
96
|
Amsinckia lycopsoides,,N,13140,325,58048,202033,,Bugloss-flowered Fiddleneck
|
97
|
-
Amsinckia menziesii,rancher's fireweed,N,13145,326,55436,202034,,Menzies' Fiddleneck
|
97
|
+
Amsinckia menziesii,rancher's fireweed,N,13145,326,55436,202034,,Menzies' Fiddleneck,annual,orange
|
98
|
+
Amsinckia retrorsa,rigid fiddleneck,N,13147,11325,58049,202037,,Rigid Fiddleneck,annual,yellow,2,5
|
98
99
|
Amsinckia tessellata var. gloriosa,,N,77019,333,80365,202042,,Carrizo Fiddleneck
|
99
100
|
Amsinckia tessellata var. tessellata,devil's lettuce,N,77020,334,58852,202043,,Desert Fiddleneck
|
100
101
|
Amsinckia vernicosa,,N,13155,335,58051,202027,,Green Fiddleneck
|
@@ -236,7 +237,7 @@ Brickellia californica,California brickelbush,N,1794,1152,58803,202493,true,Bric
|
|
236
237
|
Briza maxima,quaking grass,X,16135,1165,57157,136989,true
|
237
238
|
Briza minor,little quaking grass,X,16137,1166,57162,136993,true
|
238
239
|
Brodiaea elegans subsp. elegans,harvest brodiaea,N,49461,1175,57127,202520,true,Harvest Brodiaea,corm,purple,4,8
|
239
|
-
Brodiaea terrestris subsp. terrestris,,N,49464,1188,59081,202533,true,Dwarf Brodiaea,corm
|
240
|
+
Brodiaea terrestris subsp. terrestris,,N,49464,1188,59081,202533,true,Dwarf Brodiaea,corm,purple,4,7
|
240
241
|
Bromus arenarius,Australian chess,X,16216,1191,58368,137101,true
|
241
242
|
Bromus berteroanus,Chilean chess,X,16219,9740,75897,137110,true
|
242
243
|
Bromus catharticus var. catharticus,rescue grass,X,85279,11433,80494,169088,true
|
@@ -274,9 +275,9 @@ Callitriche marginata,water-starwort,N,16692,1259,58093,64128,true,Winged Water
|
|
274
275
|
Callitriche trochlearis,,N,16702,1261,69994,64137,true,Effluent Water-starwort
|
275
276
|
Calochortus albus,white globe lily,N,16710,1264,51315,202570,true,White Globe Lily,,white,4,6
|
276
277
|
Calochortus argillosus,clay mariposa lily,N,76542,1268,64330,202576,true,Clay Mariposa Lily,bulb,"white,pink",4,6
|
277
|
-
Calochortus clavatus var. pallidus
|
278
|
-
Calochortus invenustus
|
279
|
-
Calochortus leichtlinii
|
278
|
+
Calochortus clavatus var. pallidus,,N,55455,1275,58360,202583,true,Pale Yellow Mariposa
|
279
|
+
Calochortus invenustus,,N,16733,1284,64432,202590,true,Plain Mariposa Lily
|
280
|
+
Calochortus leichtlinii,,N,16735,1288,52542,202594,true,Leichtlin's Mariposa Lily
|
280
281
|
Calochortus luteus,yellow mariposa lily,N,16737,1290,51077,202595,true,Yellow Mariposa Lily,bulb,yellow,4,6
|
281
282
|
Calochortus pulchellus,Mt. Diablo fairy lantern,N,16755,1303,47326,202609,true,Mt. Diablo Fairy Lantern,bulb,,,,50,1B.2,,,S2,G2
|
282
283
|
Calochortus splendens,,N,16759,1306,58361,202611,true,Splendid Mariposa Lily,bulb
|
@@ -363,7 +364,7 @@ Ceanothus thyrsiflorus,blue blossom,N,18501,1830,56617,12790,true,Blueblossom Ce
|
|
363
364
|
Centaurea calcitrapa,purple star-thistle,X,1922,1845,56865,202776,true
|
364
365
|
Centaurea cyanus,"bachelor's button,cornflower",X,1925,1846,933404,202778,true
|
365
366
|
Centaurea iberica,Iberian starthistle,X,1931,1849,76212,206620,true
|
366
|
-
Centaurea melitensis,"tocalote,Maltese
|
367
|
+
Centaurea melitensis,"tocalote,Maltese star-thistle",X,1934,1851,57922,202785,true
|
367
368
|
Centaurea solstitialis,yellow star-thistle,X,1946,1853,52588,202793,true
|
368
369
|
Centranthus ruber,red valerian,X,18595,1864,57283,202799
|
369
370
|
Centromadia fitchii,Fitch's spikeweed,N,77593,10809,58804,202801,true,Fitch Spikeweed
|
@@ -442,7 +443,7 @@ Claytonia exigua subsp. glauca,,N,76949,2233,57229,127855,true,Serpentine Spring
|
|
442
443
|
Claytonia gypsophiloides,candy stripers,N,19620,2234,55344,112597,true,Gypsum Springbeauty,annual,pink,3,5
|
443
444
|
Claytonia parviflora subsp. parviflora,,N,74695,2242,58296,127861,true,Utah Miner's Lettuce,"annual,perennial",white,3,6
|
444
445
|
Claytonia perfoliata subsp. mexicana,,N,76956,2245,53004,127866,true,Southern Miner's Lettuce,annual,white,2,4
|
445
|
-
Claytonia perfoliata subsp. perfoliata,
|
446
|
+
Claytonia perfoliata subsp. perfoliata,miner's lettuce,N,49921,2246,53002,127867,true,Miner's Lettuce,annual,white,1,5
|
446
447
|
Claytonia rubra subsp. depressa,red stem spring beauty,N,76957,2248,79751,127869,true,Miner's Lettuce,annual,white,2,4
|
447
448
|
Clematis lasiantha,pipestems,N,19682,2254,49876,13749,true,Chaparral Clematis,,white,1,6
|
448
449
|
Clematis ligusticifolia,virgin's bower,N,19683,2255,58996,13750,true,Virgin's Bower,,white,6,9
|
@@ -637,7 +638,7 @@ Elymus condensatus,giant wild-rye,N,24165,11636,164673,140055,Leymus condensatus
|
|
637
638
|
Elymus elymoides var. elymoides,squirreltail,N,72180,11639,58377,211223,Elymus elymoides subsp. elymoides,Squirreltail
|
638
639
|
Elymus glaucus subsp. glaucus,blue wildrye,N,50264,2937,57171,167143,true,Western Rye Grass
|
639
640
|
Elymus glaucus subsp. virescens,,N,50266,2939,61203,206754,true,Blue Wildrye
|
640
|
-
Elymus hispidus,wheatgrass,X,24153,11640,155848,140096,Thinopyrum intermedium
|
641
|
+
Elymus hispidus,wheatgrass,X,24153,11640,155848,140096,Thinopyrum intermedium
|
641
642
|
Elymus mollis subsp. mollis,,N,70142,11641,118426,206755,Leymus mollis subsp. mollis,Dune Wild Rye
|
642
643
|
Elymus multisetus,big squirreltail,N,24122,2941,57167,140134,true,Big Squirreltail
|
643
644
|
Elymus ponticus,tall wheatgrass,X,91896,11643,1301269,206756,Thinopyrum ponticum
|
@@ -700,6 +701,7 @@ Eriogonum fasciculatum var. polifolium,,N,58546,3247,58272,129983,true,Interior
|
|
700
701
|
Eriogonum gracile var. gracile,slender buckwheat,N,58563,3257,58982,129999,true,Slender Woolly Wild Buckwheat
|
701
702
|
Eriogonum incanum,frosted buckwheat,N,24809,3279,62680,114044,true,Frosted Wild Buckwheat,perennial,yellow,6,9
|
702
703
|
Eriogonum inerme var. inerme,unarmed buckwheat,N,58586,9110,80799,130026,true,Unarmed Wild Buckwheat
|
704
|
+
Eriogonum latifolium,seaside wild buckwheat,N,24832,3293,57211,114060,true,Coast Buckwheat,perennial,"white,pink",1,12
|
703
705
|
Eriogonum lobbii,granite buckwheat,N,24839,9935,77005,114067,true,Lobb's Buckwheat,perennial,"white,pink",6,8
|
704
706
|
Eriogonum luteolum var. caninum,Tiburon buckwheat,N,58623,3297,61205,130067,true,Tiburon Buckwheat,,,,,733,1B.2,,,S2,G5T2
|
705
707
|
Eriogonum luteolum var. luteolum,,N,58624,3298,64226,130068,true,Golden-carpet Wild Buckwheat
|
@@ -784,7 +786,7 @@ Festuca elmeri,Elmer fescue,N,25798,3580,64333,141011,true,Elmer Fescue
|
|
784
786
|
Festuca idahoensis,Idaho fescue,N,25808,3581,61200,141076,true,Idaho Fescue
|
785
787
|
Festuca microstachys,,N,25865,11688,77138,141123,Vulpia microstachys var. ciliata,Pacific Fescue
|
786
788
|
Festuca myuros,zorro grass,X,25869,11689,77140,141133,Vulpia myuros
|
787
|
-
Festuca octoflora,six-week's fescue,N,25872,11690,77141,141148,Vulpia octoflora
|
789
|
+
Festuca octoflora,six-week's fescue,N,25872,11690,77141,141148,Vulpia octoflora,Six Weeks Fescue
|
788
790
|
Festuca perennis,Italian ryegrass,X,91964,11691,52801,203852,Lolium multiflorum
|
789
791
|
Festuca rubra,red fescue,N,25825,3586,61061,141223,true,Red Fescue
|
790
792
|
Festuca temulenta,darnel,X,93753,11692,164712,203853,Lolium temulentum
|
@@ -1088,10 +1090,10 @@ Logfia gallica,,X,31363,9521,56949,204736,true,,annual,"brown,yellow",3,7
|
|
1088
1090
|
Lomatium californicum,chu-chu-pate,N,31389,4950,56824,204737,,California Lomatium,,yellow,4,6
|
1089
1091
|
Lomatium caruifolium var. caruifolium,,N,61026,4953,64328,204739,,Alkali Desertparsley
|
1090
1092
|
Lomatium caruifolium var. denticulatum,,N,61027,4954,60123,204740
|
1091
|
-
Lomatium dasycarpum subsp. dasycarpum,,N,51334,4960,56829,204743,,Woolly Fruited Lomatium
|
1092
|
-
Lomatium macrocarpum,,N,31433,4974,56826,204754,,Bigseed Biscuitroot
|
1093
|
+
Lomatium dasycarpum subsp. dasycarpum,,N,51334,4960,56829,204743,,Woolly Fruited Lomatium,perennial,white,3,6
|
1094
|
+
Lomatium macrocarpum,,N,31433,4974,56826,204754,,Bigseed Biscuitroot,perennial,white,4,6
|
1093
1095
|
Lomatium nudicaule,,N,31441,4983,77818,204759,,Barestem Biscuitroot
|
1094
|
-
Lomatium utriculatum,,N,31473,4999,56827,204766,,Common Lomatium
|
1096
|
+
Lomatium utriculatum,,N,31473,4999,56827,204766,,Common Lomatium,perennial,yellow,2,5
|
1095
1097
|
Lonicera hispidula,California honeysuckle,N,31505,10075,53416,204768,,Pink Honeysuckle,,pink,5,6
|
1096
1098
|
Lonicera interrupta,chaparral honeysuckle,N,31506,5009,60878,204770,,Chaparral Honeysuckle,,"yellow,white",4,5
|
1097
1099
|
Lonicera involucrata var. ledebourii,black twinberry,N,61081,5012,60990,204773,,Twinberry Honeysuckle
|
@@ -1195,8 +1197,8 @@ Mercurialis annua,annual mercury,X,33300,5450,68838,25939,true
|
|
1195
1197
|
Mesembryanthemum nodiflorum,,X,33363,5461,71191,116177,true
|
1196
1198
|
Micranthes californica,,N,91942,11841,78023,26022,true,California Saxifrage
|
1197
1199
|
Micropus amphibolus,,N,33474,5462,78034,204946,true,Mount Diablo Cottonseed,,,,,1507,3.2,,,S3S4,G3G4
|
1198
|
-
Micropus californicus var. californicus,slender cottonweed,N,7993,5464,58030,204950,true,Cottontop
|
1199
|
-
Micropus californicus var. subvestitus
|
1200
|
+
Micropus californicus var. californicus,slender cottonweed,N,7993,5464,58030,204950,true,Cottontop,annual,white,3,6
|
1201
|
+
Micropus californicus var. subvestitus,Q-tips,N,7994,5465,81107,207081,true,Q-tips,annual,white,4,6
|
1200
1202
|
Microseris acuminata,,N,4146,5466,60142,204953,true,Sierra Foothill Silverpuffs
|
1201
1203
|
Microseris bigelovii,,N,4147,5467,60977,204954,true,Coastal Silverpuffs
|
1202
1204
|
Microseris campestris,,N,4149,5469,58031,204955,true,San Joaquin Silverpuffs
|
@@ -1558,7 +1560,7 @@ Romulea rosea var. australis,,X,65230,7162,68895,207249
|
|
1558
1560
|
Rorippa curvisiliqua,yellow cress,N,41580,7168,58866,30089,true,Curvepod Yellowcress
|
1559
1561
|
Rorippa palustris subsp. palustris,,N,52673,11988,64157,43562,true,Bog Yellowcress
|
1560
1562
|
Rosa californica,California rose,N,41631,7179,53437,30158,true,California Wildrose,,pink
|
1561
|
-
Rosa gymnocarpa,wood rose,N,41652,7182,53441,30212,true,
|
1563
|
+
Rosa gymnocarpa,wood rose,N,41652,7182,53441,30212,true,Wood Rose,,pink
|
1562
1564
|
Rosa rubiginosa,sweet-brier,X,41648,11057,78886,30313,true
|
1563
1565
|
Rosa spithamea,ground rose,N,41696,7187,53442,30338,true,Ground Rose
|
1564
1566
|
Rubus armeniacus,Himalayan blackberry,X,87465,10319,61317,30459
|
@@ -1738,7 +1740,7 @@ Stephanomeria virgata subsp. pleurocarpa,,N,6227,7806,58849,206092,true,Wand Wir
|
|
1738
1740
|
Stipa cernua,nodding needlegrass,N,45640,12042,165654,149288,Nassella cernua,Nodding Needle Grass
|
1739
1741
|
Stipa lemmonii var. lemmonii,Lemmon's needlegrass,N,73899,12053,1220756,173006,Achnatherum lemmonii subsp. lemmonii
|
1740
1742
|
Stipa lepida,foothill needlegrass,N,45641,12054,165656,149399,Nassella lepida,Foothill Needlegrass
|
1741
|
-
Stipa miliacea var. miliacea,smilo grass,X,91920,12058,524183,206097,Piptatherum miliaceum
|
1743
|
+
Stipa miliacea var. miliacea,smilo grass,X,91920,12058,524183,206097,Piptatherum miliaceum
|
1742
1744
|
Stipa pulchra,purple needlegrass,N,45644,12067,165659,149498,Nassella pulchra,Purple Needlegrass
|
1743
1745
|
Streptanthus albidus subsp. peramoenus,most beautiful jewelflower,N,53142,7814,58783,258754,Streptanthus glandulosus subsp. glandulosus,,,,,,1490,1B.2,,,S2,G2T2
|
1744
1746
|
Streptanthus breweri,,N,45725,7822,79258,32606,true,Brewer's Jewelflower
|
@@ -1832,8 +1834,8 @@ Triphysaria eriantha subsp. eriantha,butter-and-eggs,N,53279,8129,59332,96567,tr
|
|
1832
1834
|
Triphysaria pusilla,,N,47296,8133,57276,78297,true,Dwarf Owl's-clover
|
1833
1835
|
Triphysaria versicolor subsp. faucibarbata,,N,53281,8135,60737,206269,true,Triphysaria
|
1834
1836
|
Trisetum canescens,,N,47326,8139,1538928,150155,true,Tall False Oat
|
1835
|
-
Triteleia hyacinthina,white brodiaea,N,47356,8154,57132,206275,true,White Brodiaea
|
1836
|
-
Triteleia laxa,Ithuriel's spear,N,47359,8160,51085,206281,true,Ithuriel's Spear
|
1837
|
+
Triteleia hyacinthina,white brodiaea,N,47356,8154,57132,206275,true,White Brodiaea,corm,white,3,7
|
1838
|
+
Triteleia laxa,Ithuriel's spear,N,47359,8160,51085,206281,true,Ithuriel's Spear,corm,blue,3,6
|
1837
1839
|
Triteleia peduncularis,,N,47363,8164,57133,206284,true,Long Rayed Brodiaea
|
1838
1840
|
Tropaeolum majus,garden nasturtium,X,47408,8167,54329,34321,true
|
1839
1841
|
Tropidocarpum capparideum,caper-fruited tropidocarpum,N,47411,8168,79456,34327,true,Caper-fruited Tropidocarpum,annual,yellow,3,4,1255,1B.1,,,S1,G1
|
@@ -0,0 +1 @@
|
|
1
|
+
Base of flower funnel-shaped.
|
@@ -0,0 +1 @@
|
|
1
|
+
Base of flower bell-shaped.
|
package/lib/externalsites.js
CHANGED
@@ -88,20 +88,26 @@ export class ExternalSites {
|
|
88
88
|
}
|
89
89
|
|
90
90
|
/**
|
91
|
-
* @param {
|
91
|
+
* @param {{taxon_id?:string,taxon_name?:string,subview?:"map"|"table",view?:"species"}} params
|
92
92
|
* @param {import("./config.js").Config} config
|
93
93
|
* @returns {URL|undefined}
|
94
94
|
*/
|
95
|
-
static getInatObsLink(
|
96
|
-
const iNatID = taxon.getINatID();
|
97
|
-
if (!iNatID) {
|
98
|
-
return;
|
99
|
-
}
|
100
|
-
|
95
|
+
static getInatObsLink(params, config) {
|
101
96
|
const url = new URL(
|
102
|
-
"https://www.inaturalist.org/observations?subview=map",
|
97
|
+
"https://www.inaturalist.org/observations?subview=map&iconic_taxa=Plantae",
|
103
98
|
);
|
104
|
-
|
99
|
+
if (params.subview) {
|
100
|
+
url.searchParams.set("subview", params.subview);
|
101
|
+
}
|
102
|
+
if (params.taxon_id) {
|
103
|
+
url.searchParams.set("taxon_id", params.taxon_id);
|
104
|
+
}
|
105
|
+
if (params.taxon_name) {
|
106
|
+
url.searchParams.set("taxon_name", params.taxon_name);
|
107
|
+
}
|
108
|
+
if (params.view) {
|
109
|
+
url.searchParams.set("view", params.view);
|
110
|
+
}
|
105
111
|
for (const p of ["place_id", "project_id"]) {
|
106
112
|
const v = config.getConfigValue("inat", p);
|
107
113
|
if (v) {
|
package/lib/htmltaxon.js
CHANGED
@@ -60,7 +60,11 @@ const OBSLINKS = {
|
|
60
60
|
},
|
61
61
|
inat: {
|
62
62
|
label: "iNaturalist",
|
63
|
-
href: (taxon, config) =>
|
63
|
+
href: (taxon, config) =>
|
64
|
+
ExternalSites.getInatObsLink(
|
65
|
+
{ taxon_id: taxon.getINatID() },
|
66
|
+
config,
|
67
|
+
),
|
64
68
|
},
|
65
69
|
};
|
66
70
|
|
@@ -120,6 +124,45 @@ class HTMLTaxon {
|
|
120
124
|
*/
|
121
125
|
static addObsLink(links, taxon, config, sourceCode, label) {
|
122
126
|
const source = OBSLINKS[sourceCode];
|
127
|
+
if (sourceCode === "inat") {
|
128
|
+
const iNatName = taxon.getINatName().split(" ");
|
129
|
+
/** @type {string[]} */
|
130
|
+
const iNatLinks = [];
|
131
|
+
iNatLinks.push(
|
132
|
+
HTML.getLink(
|
133
|
+
ExternalSites.getInatObsLink(
|
134
|
+
{ taxon_name: iNatName[0], view: "species" },
|
135
|
+
config,
|
136
|
+
),
|
137
|
+
`Genus ${iNatName[0]}`,
|
138
|
+
undefined,
|
139
|
+
true,
|
140
|
+
),
|
141
|
+
);
|
142
|
+
if (iNatName.length > 2) {
|
143
|
+
const species = `${iNatName[0]} ${iNatName[1]}`;
|
144
|
+
iNatLinks.push(
|
145
|
+
HTML.getLink(
|
146
|
+
ExternalSites.getInatObsLink(
|
147
|
+
{ taxon_name: species },
|
148
|
+
config,
|
149
|
+
),
|
150
|
+
species,
|
151
|
+
undefined,
|
152
|
+
true,
|
153
|
+
),
|
154
|
+
);
|
155
|
+
}
|
156
|
+
this.addLink(
|
157
|
+
iNatLinks,
|
158
|
+
source.href(taxon, config),
|
159
|
+
taxon.getINatSyn() ?? taxon.getName(),
|
160
|
+
);
|
161
|
+
|
162
|
+
const html = HTML.textElement("span", label ?? source.label);
|
163
|
+
links.push(html + HTML.wrap("ul", HTML.arrayToLI(iNatLinks)));
|
164
|
+
return;
|
165
|
+
}
|
123
166
|
this.addLink(links, source.href(taxon, config), label ?? source.label);
|
124
167
|
}
|
125
168
|
|
package/lib/photo.js
CHANGED
@@ -10,10 +10,10 @@ export class Photo {
|
|
10
10
|
#rights;
|
11
11
|
|
12
12
|
/**
|
13
|
-
* @param {
|
13
|
+
* @param {string} id
|
14
14
|
* @param {string} ext
|
15
|
-
* @param {import("./utils/inat-tools.js").
|
16
|
-
* @param {string} rightsHolder
|
15
|
+
* @param {import("./utils/inat-tools.js").AllowedLicenseCode} licenseCode
|
16
|
+
* @param {string|undefined} rightsHolder
|
17
17
|
*/
|
18
18
|
constructor(id, ext, licenseCode, rightsHolder) {
|
19
19
|
this.#id = id;
|
@@ -22,7 +22,9 @@ export class Photo {
|
|
22
22
|
if (licenseCode === "cc0") this.#rights = "CC0";
|
23
23
|
else if (licenseCode === "cc-by") this.#rights = "CC BY";
|
24
24
|
else if (licenseCode === "cc-by-nc") this.#rights = "CC BY-NC";
|
25
|
-
else
|
25
|
+
else {
|
26
|
+
throw new Error(`unexpected license code ${licenseCode}`);
|
27
|
+
}
|
26
28
|
}
|
27
29
|
|
28
30
|
/**
|
package/lib/taxonomy/taxa.js
CHANGED
@@ -115,27 +115,7 @@ class Taxa {
|
|
115
115
|
#loadPhotosFromFile(dataDir, filename) {
|
116
116
|
if (!fs.existsSync(path.join(dataDir, filename))) return;
|
117
117
|
/** @type {import("../utils/inat-tools.js").InatCsvPhoto[]} */
|
118
|
-
const csvPhotos = CSV.
|
119
|
-
/** @type {import("../utils/inat-tools.js").InatLicenseCode} */
|
120
|
-
let licenseCode = "cc-by";
|
121
|
-
if (row.licenseCode === "cc-by-nc-sa") licenseCode = "cc-by-nc-sa";
|
122
|
-
else if (row.licenseCode === "cc-by-nc") licenseCode = "cc-by-nc";
|
123
|
-
else if (row.licenseCode === "cc-by-nc-nd")
|
124
|
-
licenseCode = "cc-by-nc-nd";
|
125
|
-
else if (row.licenseCode === "cc-by") licenseCode = "cc-by";
|
126
|
-
else if (row.licenseCode === "cc-by-sa") licenseCode = "cc-by-sa";
|
127
|
-
else if (row.licenseCode === "cc-by-nd") licenseCode = "cc-by-nd";
|
128
|
-
else if (row.licenseCode === "pd") licenseCode = "pd";
|
129
|
-
else if (row.licenseCode === "gdfl") licenseCode = "gdfl";
|
130
|
-
else if (row.licenseCode === "cc0") licenseCode = "cc0";
|
131
|
-
return {
|
132
|
-
attrName: row.attrName,
|
133
|
-
ext: row.ext,
|
134
|
-
id: Number(row.id),
|
135
|
-
licenseCode,
|
136
|
-
name: row.name,
|
137
|
-
};
|
138
|
-
});
|
118
|
+
const csvPhotos = CSV.readFile(path.join(dataDir, filename));
|
139
119
|
for (const csvPhoto of csvPhotos) {
|
140
120
|
const taxon = this.getTaxon(csvPhoto.name);
|
141
121
|
if (!taxon) {
|
@@ -156,8 +136,9 @@ class Taxa {
|
|
156
136
|
* @param {string} dataDir
|
157
137
|
*/
|
158
138
|
#loadInatPhotos(dataDir) {
|
159
|
-
|
139
|
+
// Prefer taxon photos, as they are somewhat curated.
|
160
140
|
this.#loadPhotosFromFile(dataDir, "inattaxonphotos.csv");
|
141
|
+
this.#loadPhotosFromFile("./data", "inatobsphotos.csv");
|
161
142
|
this.#loadPhotosFromFile(dataDir, "inatobsphotos.csv");
|
162
143
|
}
|
163
144
|
|
package/lib/tools/inat.js
CHANGED
@@ -3,6 +3,7 @@ import { Files } from "../files.js";
|
|
3
3
|
import { CSV } from "../csv.js";
|
4
4
|
import { sleep } from "../util.js";
|
5
5
|
import { TaxaCSV } from "./taxacsv.js";
|
6
|
+
import { SynCSV } from "./syncsv.js";
|
6
7
|
|
7
8
|
/**
|
8
9
|
* @typedef {{id:string,
|
@@ -65,8 +66,10 @@ export class INat {
|
|
65
66
|
|
66
67
|
const missingTaxa = [];
|
67
68
|
|
68
|
-
|
69
|
+
/** @type {Map<string,string>} */
|
69
70
|
const idsToUpdate = new Map();
|
71
|
+
/** @type {import("./syncsv.js").SynData[]} */
|
72
|
+
const synonymsToAdd = [];
|
70
73
|
|
71
74
|
for (const taxon of taxa.getTaxonList()) {
|
72
75
|
const name = taxon.getName();
|
@@ -103,12 +106,14 @@ export class INat {
|
|
103
106
|
errorLog,
|
104
107
|
data.name,
|
105
108
|
data.iNatName,
|
109
|
+
synonymsToAdd,
|
106
110
|
);
|
107
111
|
}
|
108
112
|
|
109
113
|
this.#checkExceptions(taxa, exceptions, errorLog);
|
110
114
|
|
111
115
|
if (update) {
|
116
|
+
updateSynCSV(dataDir, synonymsToAdd);
|
112
117
|
updateTaxaCSV(dataDir, idsToUpdate);
|
113
118
|
}
|
114
119
|
}
|
@@ -167,14 +172,21 @@ export class INat {
|
|
167
172
|
}
|
168
173
|
|
169
174
|
/**
|
170
|
-
*
|
171
175
|
* @param {import("../types.js").Taxa} taxa
|
172
176
|
* @param {import("../exceptions.js").Exceptions} exceptions
|
173
177
|
* @param {import("../errorlog.js").ErrorLog} errorLog
|
174
178
|
* @param {string} name
|
175
179
|
* @param {string} iNatName
|
180
|
+
* @param {import("./syncsv.js").SynData[]} synonymsToAdd
|
176
181
|
*/
|
177
|
-
static async #findCurrentName(
|
182
|
+
static async #findCurrentName(
|
183
|
+
taxa,
|
184
|
+
exceptions,
|
185
|
+
errorLog,
|
186
|
+
name,
|
187
|
+
iNatName,
|
188
|
+
synonymsToAdd,
|
189
|
+
) {
|
178
190
|
/**
|
179
191
|
* @param {{matched_term:string,name:string,rank:string}[]} results
|
180
192
|
* @param {string} iNatName
|
@@ -242,11 +254,17 @@ export class INat {
|
|
242
254
|
}
|
243
255
|
}
|
244
256
|
} else {
|
257
|
+
const formerName = this.makeSynonymName(result, errorLog);
|
245
258
|
errorLog.log(
|
246
259
|
name,
|
247
260
|
"found iNat synonym",
|
248
|
-
|
261
|
+
formerName + "," + name + ",INAT",
|
249
262
|
);
|
263
|
+
synonymsToAdd.push({
|
264
|
+
Former: formerName,
|
265
|
+
Current: name,
|
266
|
+
Type: "INAT",
|
267
|
+
});
|
250
268
|
}
|
251
269
|
|
252
270
|
// Delay to throttle queries to iNat API.
|
@@ -297,6 +315,17 @@ class InatTaxon {
|
|
297
315
|
}
|
298
316
|
}
|
299
317
|
|
318
|
+
/**
|
319
|
+
* @param {string} dataDir
|
320
|
+
* @param {import("./syncsv.js").SynData[]} synonymsToAdd
|
321
|
+
*/
|
322
|
+
function updateSynCSV(dataDir, synonymsToAdd) {
|
323
|
+
const csv = new SynCSV(dataDir);
|
324
|
+
const data = csv.getData();
|
325
|
+
data.push(...synonymsToAdd);
|
326
|
+
csv.write();
|
327
|
+
}
|
328
|
+
|
300
329
|
/**
|
301
330
|
* @param {string} dataDir
|
302
331
|
* @param {Map<string,string>} idsToUpdate
|