Commit 8bb0b69e authored by Marcel Stör's avatar Marcel Stör
Browse files

Experiment with MutationObserver

parent eca92afd
...@@ -42,20 +42,9 @@ var nodemcu = nodemcu || {}; ...@@ -42,20 +42,9 @@ var nodemcu = nodemcu || {};
* the subsequent DOM manipulation using a DOM4 MutationObserver. * the subsequent DOM manipulation using a DOM4 MutationObserver.
*/ */
function addLanguageSelectorToRtdFlyOutMenu() { function addLanguageSelectorToRtdFlyOutMenu() {
var observer, observerConfig = {childList: true}; var observer = new MutationObserver(function (mutations) {
var flyOutWrapper = $('.rst-other-versions'); // since mutation on the target node was triggered we can safely assume the inject RTD div has now been added
var injectedDiv = $('.rst-other-versions .injected');
// Create an observer instance
observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
debugger;
var newNodes = mutation.addedNodes; // DOM NodeList
if (newNodes !== null) { // If there are new nodes added
var $nodes = $(newNodes); // jQuery set
$nodes.each(function () {
var $node = $(this);
});
var selectedLanguageCode = determineSelectedLanguageCode(); var selectedLanguageCode = determineSelectedLanguageCode();
var dl = document.createElement('dl'); var dl = document.createElement('dl');
var dt = document.createElement('dt'); var dt = document.createElement('dt');
...@@ -64,15 +53,13 @@ var nodemcu = nodemcu || {}; ...@@ -64,15 +53,13 @@ var nodemcu = nodemcu || {};
for (var languageCode in languageCodeToNameMap) { for (var languageCode in languageCodeToNameMap) {
dl.appendChild(createLanguageLinkFor(languageCode, selectedLanguageCode === languageCode)); dl.appendChild(createLanguageLinkFor(languageCode, selectedLanguageCode === languageCode));
} }
flyOutWrapper.prepend(dl); injectedDiv.prepend(dl);
// Later, you can stop observing // no need for that observer anymore
observer.disconnect(); observer.disconnect();
}
});
}); });
// Pass in the target node, as well as the observer options // observed target node is the fly-out wrapper, the only event we care about is when children are modified
observer.observe(flyOutWrapper[0], observerConfig); observer.observe($('.rst-other-versions')[0], {childList: true});
} }
function createLanguageLinkFor(languageCode, isCurrentlySelected) { function createLanguageLinkFor(languageCode, isCurrentlySelected) {
var strong; var strong;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment