@atlaskit/app-provider
Version:
A top level provider for the Design System.
40 lines • 1.11 kB
JavaScript
/**
* Enables a document attribute with reference-counted cleanup.
*/
export function installDocumentAttribute(targetDocument, attribute, controllers) {
const existingController = controllers.get(targetDocument);
if (existingController) {
existingController.references += 1;
let isReleased = false;
return () => {
if (isReleased) {
return;
}
isReleased = true;
existingController.references -= 1;
if (existingController.references === 0) {
existingController.release();
controllers.delete(targetDocument);
}
};
}
const rootElement = targetDocument.documentElement;
const controller = {
references: 1,
release: () => rootElement.removeAttribute(attribute)
};
rootElement.setAttribute(attribute, '');
controllers.set(targetDocument, controller);
let isReleased = false;
return () => {
if (isReleased) {
return;
}
isReleased = true;
controller.references -= 1;
if (controller.references === 0) {
controller.release();
controllers.delete(targetDocument);
}
};
}