Skip to content

Commit

Permalink
Optimization: only set widgets language change handler once
Browse files Browse the repository at this point in the history
  • Loading branch information
eyelidlessness committed May 16, 2023
1 parent 9550a89 commit 049f4fd
Showing 1 changed file with 24 additions and 2 deletions.
26 changes: 24 additions & 2 deletions src/js/widgets-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,11 @@ const reset = () => {
widgetsImplementingEnable = new Set();
};

/** @type {Map<typeof Widget, Set<HTMLElement>>} */
const languageChangeUpdates = new Map();

let didSetLanguageChangeListener = false;

/**
* Calls widget('update') when the language changes. This function is called upon initialization,
* and whenever a new repeat is created. In the latter case, since the widget('update') is called upon
Expand All @@ -217,9 +222,26 @@ const reset = () => {
function _setLangChangeListener(Widget, els) {
// call update for all widgets when language changes
if (els.length > 0) {
formElement.addEventListener(events.ChangeLanguage().type, () => {
new Collection(els).update(Widget);
let all = languageChangeUpdates.get(Widget);

if (all == null) {
all = new Set();
languageChangeUpdates.set(Widget, all);
}

els.forEach((el) => {
all.add(el);
});

if (!didSetLanguageChangeListener) {
formElement.addEventListener(events.ChangeLanguage().type, () => {
for (const [Widget, els] of languageChangeUpdates) {
new Collection([...els]).update(Widget);
}
});

didSetLanguageChangeListener = true;
}
}
}

Expand Down

0 comments on commit 049f4fd

Please sign in to comment.