diff --git a/swap.js b/swap.js index 8bda5c7..fa44879 100644 --- a/swap.js +++ b/swap.js @@ -1,45 +1,45 @@ var Swap = (() => { - "use strict"; - var loaders = {}, unloaders = {}; - register_links(); - new MutationObserver(dom_changes).observe(document.querySelector("html"), { childList: true, subtree: true }); - window.addEventListener("popstate", () => update(location.href, "[swap-history-restore]", false, "body")); - window.addEventListener("DOMContentLoaded", dom_load); - function update(href, target, pushstate, fallback = null) { - fetch(href, { headers: new Headers({"swap-target": target}) }).then(r => r.text()).then(html => { - var tmp = document.createElement('html'); - tmp.innerHTML = html; - (document.querySelector(target) ?? document.querySelector(fallback)).outerHTML = (tmp.querySelector(target) ?? tmp.querySelector(fallback)).outerHTML; - if (pushstate) - history.pushState({}, "", href); - register_links(); - }); - } - function register_links() { - for (const elt of document.querySelectorAll('*[swap-target]')) - elt.onclick = e => { - update(elt.getAttribute('href'), elt.getAttribute('swap-target'), elt.getAttribute('swap-history')); - e.preventDefault(); - } - } - function dom_changes(mutations) { - for (var selector in unloaders) - for (var m of mutations) - for (var n of m.removedNodes) - if (n.matches && n.querySelector && (n.matches(selector) || n.querySelector(selector))) { - unloaders[selector](); - delete unloaders[selector]; - } - for (var selector in loaders) - for (var m of mutations) - for (var n of m.addedNodes) - if (n.matches && n.querySelector && (n.matches(selector) || n.querySelector(selector))) - unloaders[selector] = loaders[selector](); - } - function dom_load() { - for (var selector in loaders) - if (document.querySelector(selector)) - unloaders[selector] = loaders[selector](); - } - return {loaders: loaders}; + "use strict"; + var loaders = {}, unloaders = {}; + register_links(); + new MutationObserver(dom_changes).observe(document.querySelector("html"), { childList: true, subtree: true }); + window.addEventListener("popstate", () => update(location.href, "[swap-history-restore]", false, "body")); + window.addEventListener("DOMContentLoaded", dom_load); + function update(href, target, pushstate, fallback = null) { + fetch(href, { headers: new Headers({ "swap-target": target }) }).then(r => r.text()).then(html => { + var tmp = document.createElement('html'); + tmp.innerHTML = html; + (document.querySelector(target) ?? document.querySelector(fallback)).outerHTML = (tmp.querySelector(target) ?? tmp.querySelector(fallback)).outerHTML; + if (pushstate === "true" || pushstate === true) + history.pushState({}, "", href); + register_links(); + }); + } + function register_links() { + for (const elt of document.querySelectorAll('*[swap-target]')) + elt.onclick = e => { + update(elt.getAttribute('href'), elt.getAttribute('swap-target'), elt.getAttribute('swap-history')); + e.preventDefault(); + } + } + function dom_changes(mutations) { + for (var selector in unloaders) + for (var m of mutations) + for (var n of m.removedNodes) + if (n.matches && n.querySelector && (n.matches(selector) || n.querySelector(selector))) { + unloaders[selector](); + delete unloaders[selector]; + } + for (var selector in loaders) + for (var m of mutations) + for (var n of m.addedNodes) + if (n.matches && n.querySelector && (n.matches(selector) || n.querySelector(selector))) + unloaders[selector] = loaders[selector](); + } + function dom_load() { + for (var selector in loaders) + if (document.querySelector(selector)) + unloaders[selector] = loaders[selector](); + } + return { loaders: loaders }; })();