@atlaskit/app-provider
Version:
A top level provider for the Design System.
48 lines (47 loc) • 1.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.installDocumentAttribute = installDocumentAttribute;
/**
* Enables a document attribute with reference-counted cleanup.
*/
function installDocumentAttribute(targetDocument, attribute, controllers) {
var existingController = controllers.get(targetDocument);
if (existingController) {
existingController.references += 1;
var _isReleased = false;
return function () {
if (_isReleased) {
return;
}
_isReleased = true;
existingController.references -= 1;
if (existingController.references === 0) {
existingController.release();
controllers.delete(targetDocument);
}
};
}
var rootElement = targetDocument.documentElement;
var controller = {
references: 1,
release: function release() {
return rootElement.removeAttribute(attribute);
}
};
rootElement.setAttribute(attribute, '');
controllers.set(targetDocument, controller);
var isReleased = false;
return function () {
if (isReleased) {
return;
}
isReleased = true;
controller.references -= 1;
if (controller.references === 0) {
controller.release();
controllers.delete(targetDocument);
}
};
}