element-internals-polyfill
Version:
A polyfill for the element internals specification
71 lines (70 loc) • 2.31 kB
JavaScript
import { upgradeMap } from "./maps.js";
import { setAttribute } from "./utils.js";
import "./types.js";
export const aom = {
ariaAtomic: "aria-atomic",
ariaAutoComplete: "aria-autocomplete",
ariaBrailleLabel: "aria-braillelabel",
ariaBrailleRoleDescription: "aria-brailleroledescription",
ariaBusy: "aria-busy",
ariaChecked: "aria-checked",
ariaColCount: "aria-colcount",
ariaColIndex: "aria-colindex",
ariaColIndexText: "aria-colindextext",
ariaColSpan: "aria-colspan",
ariaCurrent: "aria-current",
ariaDescription: "aria-description",
ariaDisabled: "aria-disabled",
ariaExpanded: "aria-expanded",
ariaHasPopup: "aria-haspopup",
ariaHidden: "aria-hidden",
ariaInvalid: "aria-invalid",
ariaKeyShortcuts: "aria-keyshortcuts",
ariaLabel: "aria-label",
ariaLevel: "aria-level",
ariaLive: "aria-live",
ariaModal: "aria-modal",
ariaMultiLine: "aria-multiline",
ariaMultiSelectable: "aria-multiselectable",
ariaOrientation: "aria-orientation",
ariaPlaceholder: "aria-placeholder",
ariaPosInSet: "aria-posinset",
ariaPressed: "aria-pressed",
ariaReadOnly: "aria-readonly",
ariaRelevant: "aria-relevant",
ariaRequired: "aria-required",
ariaRoleDescription: "aria-roledescription",
ariaRowCount: "aria-rowcount",
ariaRowIndex: "aria-rowindex",
ariaRowIndexText: "aria-rowindextext",
ariaRowSpan: "aria-rowspan",
ariaSelected: "aria-selected",
ariaSetSize: "aria-setsize",
ariaSort: "aria-sort",
ariaValueMax: "aria-valuemax",
ariaValueMin: "aria-valuemin",
ariaValueNow: "aria-valuenow",
ariaValueText: "aria-valuetext",
role: "role",
};
export const initAom = (ref, internals) => {
for (let key in aom) {
internals[key] = null;
let closureValue = null;
const attributeName = aom[key];
Object.defineProperty(internals, key, {
get() {
return closureValue;
},
set(value) {
closureValue = value;
if (ref.isConnected) {
setAttribute(ref, attributeName, value);
}
else {
upgradeMap.set(ref, internals);
}
},
});
}
};