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