diff --git a/GanjooRazor/Pages/Partials/GanjoorPage/PageTypes/_CatPagePartial.cshtml b/GanjooRazor/Pages/Partials/GanjoorPage/PageTypes/_CatPagePartial.cshtml index 4e31ccab..f8e36fda 100644 --- a/GanjooRazor/Pages/Partials/GanjoorPage/PageTypes/_CatPagePartial.cshtml +++ b/GanjooRazor/Pages/Partials/GanjoorPage/PageTypes/_CatPagePartial.cshtml @@ -182,7 +182,13 @@ if (marker.poemGeoTag.LunarYear != null) { markOrder = marker.order + ' - '; } - var poemDesc = markOrder + '' + marker.poemGeoTag.Location.Name + '
' + marker.poemGeoTag.Poem.FullTitle + ''; + // the location's own coordinates are embedded here as literal numbers, not as a + // "marker.poemGeoTag...." lookup - that onclick string is parsed and executed later, + // when the rendered link is actually clicked, in global scope, where "marker" would + // otherwise resolve to the shared/leaked loop variable below (whichever marker was + // built LAST), making every popup's link open the same one location regardless of + // which marker was actually clicked + var poemDesc = markOrder + '' + marker.poemGeoTag.Location.Name + '
' + marker.poemGeoTag.Poem.FullTitle + ''; if (marker.poemGeoTag.LunarYear != null) { poemDesc += '
سال ' + persianizeNumerals(marker.poemGeoTag.LunarYear.toString()) + ' قمری'; } @@ -200,7 +206,10 @@ for (var i = 0; i < poemGeoTags.length; i++) { var poemGeoTag = poemGeoTags[i]; - marker = L.marker([poemGeoTag.Location.Latitude, poemGeoTag.Location.Longitude]); + // declared with "var" so it's local to this closure instead of leaking as an + // implicit global that every iteration overwrites (see the onclick fix above for + // why that leak was the actual user-visible bug) + var marker = L.marker([poemGeoTag.Location.Latitude, poemGeoTag.Location.Longitude]); marker.poemGeoTag = poemGeoTag marker.order = persianizeNumerals((i + 1).toString()); marker.addTo(layerGroup); diff --git a/GanjooRazor/Pages/Partials/GanjoorPage/PageTypes/_PoetPagePartial.cshtml b/GanjooRazor/Pages/Partials/GanjoorPage/PageTypes/_PoetPagePartial.cshtml index 1add556c..0ed61457 100644 --- a/GanjooRazor/Pages/Partials/GanjoorPage/PageTypes/_PoetPagePartial.cshtml +++ b/GanjooRazor/Pages/Partials/GanjoorPage/PageTypes/_PoetPagePartial.cshtml @@ -320,7 +320,13 @@ if (marker.poemGeoTag.LunarYear != null) { markOrder = marker.order + ' - '; } - var poemDesc = markOrder + '' + marker.poemGeoTag.Location.Name + '
' + marker.poemGeoTag.Poem.FullTitle + ''; + // the location's own coordinates are embedded here as literal numbers, not as a + // "marker.poemGeoTag...." lookup - that onclick string is parsed and executed later, + // when the rendered link is actually clicked, in global scope, where "marker" would + // otherwise resolve to the shared/leaked loop variable below (whichever marker was + // built LAST), making every popup's link open the same one location regardless of + // which marker was actually clicked + var poemDesc = markOrder + '' + marker.poemGeoTag.Location.Name + '
' + marker.poemGeoTag.Poem.FullTitle + ''; if (marker.poemGeoTag.LunarYear != null) { poemDesc += '
سال ' + persianizeNumerals(marker.poemGeoTag.LunarYear.toString()) + ' قمری'; } @@ -338,7 +344,10 @@ for (var i = 0; i < poemGeoTags.length; i++) { var poemGeoTag = poemGeoTags[i]; - marker = L.marker([poemGeoTag.Location.Latitude, poemGeoTag.Location.Longitude]); + // declared with "var" so it's local to this closure instead of leaking as an + // implicit global that every iteration overwrites (see the onclick fix above for + // why that leak was the actual user-visible bug) + var marker = L.marker([poemGeoTag.Location.Latitude, poemGeoTag.Location.Longitude]); marker.poemGeoTag = poemGeoTag marker.order = persianizeNumerals((i + 1).toString()); marker.addTo(layerGroup); diff --git a/RMuseum/RMuseum.xml b/RMuseum/RMuseum.xml index 498a5c90..15a5c3ef 100644 --- a/RMuseum/RMuseum.xml +++ b/RMuseum/RMuseum.xml @@ -15214,6 +15214,17 @@ as Importance above. Null/empty is treated as Unknown. + + + only meaningful when ExistingPersonId is null (a brand new person is being created). + Normally, if Name exactly matches an already-approved GanjoorRelatedPerson, + _MaterializePersonGraphAsync rejects the submission rather than silently creating a + near-duplicate node - the far more common case is a contributor who free-typed a name + instead of picking the existing person via the search-as-you-type selector. Set this to + true only when the name collision is known/intentional (e.g. two distinct Shahnameh + characters sharing a name) to let the new person be created anyway. + + one edge in a PersonGraphSuggestion, between two nodes referenced by their LocalKey (Person1/ @@ -22273,6 +22284,21 @@ submission-time check is ever bypassed). + + + affiliation types whose two sides are interchangeable (Person1/Person2 order carries no + meaning) - mirrors the convention already baked into SuggestNewPersonRelation.cshtml's + dropdown, where these are the only affiliation options with no "_Other"/"_Subject" pair + + + + + true if modifying an affiliation edge from oldType to newType would cross the symmetric/ + directional boundary - PersonAffiliationType.Other is excluded on either side, since its + direction (if any) is whatever the free-text Note says rather than something the type + itself implies, so moving into/out of Other is never treated as crossing the boundary + + submit a suggested edit to an already-approved person's own fields