1 changed files with 25 additions and 14 deletions
@ -1,19 +1,30 @@
|
||||
(function (Drupal, once) { |
||||
Drupal.behaviors.fixMiradorAnnotationSpaces = { |
||||
attach: function (context, settings) { |
||||
// Find all Mirador annotation HTML content wrappers
|
||||
const annotationElements = once( |
||||
"fix-annotation-spaces", |
||||
".mirador-third-party-html", |
||||
context |
||||
(function () { |
||||
// Guard against running multiple observers if the script is loaded more than once
|
||||
if (window.__miradorSpaceFixInitialized) return; |
||||
window.__miradorSpaceFixInitialized = true; |
||||
|
||||
const observer = new MutationObserver((mutations) => { |
||||
// Target any third-party HTML content blocks in Mirador that haven't been cleaned yet
|
||||
const elements = document.querySelectorAll( |
||||
".mirador-third-party-html:not([data-fixed])" |
||||
); |
||||
|
||||
annotationElements.forEach((el) => { |
||||
// Replace both the literal ' ' string and the non-breaking space character (\u00A0)
|
||||
if (elements.length > 0) { |
||||
elements.forEach((el) => { |
||||
// Swap non-breaking spaces for normal breakable spaces
|
||||
el.innerHTML = el.innerHTML |
||||
.replace(/ /g, " ") |
||||
.replace(/\u00A0/g, " "); |
||||
|
||||
// Mark element so we don't re-process it on subsequent mutations
|
||||
el.setAttribute("data-fixed", "true"); |
||||
}); |
||||
} |
||||
}); |
||||
|
||||
// Start observing the document body for dynamically added Mirador elements
|
||||
observer.observe(document.body, { |
||||
childList: true, |
||||
subtree: true, |
||||
}); |
||||
}, |
||||
}; |
||||
})(Drupal, once); |
||||
})(); |
||||
|
||||
Loading…
Reference in new issue