diff --git a/firefox-desktop-amp.xpi b/firefox-desktop-amp.xpi new file mode 100644 index 0000000..68896fe Binary files /dev/null and b/firefox-desktop-amp.xpi differ diff --git a/firefox-nightly/amp.js b/firefox-nightly/amp.js new file mode 100644 index 0000000..aed8351 --- /dev/null +++ b/firefox-nightly/amp.js @@ -0,0 +1,63 @@ +var docEl = document.documentElement; +var isAMP = docEl.hasAttribute('amp') || docEl.hasAttribute('⚡️'); +var observerConfig = { childList: true, subtree: true }; + +var documentObserver = observeNode(docEl, inspectDocNodes); +var headObserver; + + +function observeNode(node, cb){ + var obs = new MutationObserver(function(mutations) { + mutations.forEach(function(mutation) { + for (var i = 0; i < mutation.addedNodes.length; i++) + cb(mutation.addedNodes[i]); + }); + }); + obs.observe(node, observerConfig); + return obs; +} + +function inspectDocNodes(node){ + if (node.tagName == "LINK" && node.getAttribute('rel').toLowerCase() == 'amphtml'){ + documentObserver.disconnect(); + redirect(node); + } + + if (node.tagName != "HEAD") return; + + if (isAMP) + applyMobileCSS(node); + else { + queryForMeta(node); + headObserver = observeNode(node, inspectHeadNodes); + documentObserver.disconnect(); + // console.log('disconnected from doc') + } +} + +function inspectHeadNodes(node) { + // node.nodeType == 1 && console.log(node); + if (node.tagName == "LINK" && node.getAttribute('rel').toLowerCase() == 'amphtml') { + headObserver.disconnect(); + redirect(node); + } + // if no match found, headObserver is not disconnected. +} + +function queryForMeta(head) { + var node = head.querySelector('link[rel="amphtml"]'); + if (node) + redirect(node); +} + +function redirect(node) { + window.location = node.getAttribute("href"); +} + +function applyMobileCSS(node) { + var css = "body > * { max-width: 600px; margin: 0px auto; }"; + var style = document.createElement('style'); + style.type = 'text/css'; + style.appendChild(document.createTextNode(css)); + node.appendChild(style); +} diff --git a/firefox-nightly/icon128.png b/firefox-nightly/icon128.png new file mode 100644 index 0000000..4ee7984 Binary files /dev/null and b/firefox-nightly/icon128.png differ diff --git a/firefox-nightly/icon16.png b/firefox-nightly/icon16.png new file mode 100644 index 0000000..678527e Binary files /dev/null and b/firefox-nightly/icon16.png differ diff --git a/firefox-nightly/icon48.png b/firefox-nightly/icon48.png new file mode 100644 index 0000000..a3827a2 Binary files /dev/null and b/firefox-nightly/icon48.png differ diff --git a/firefox-nightly/manifest.json b/firefox-nightly/manifest.json new file mode 100644 index 0000000..eb76405 --- /dev/null +++ b/firefox-nightly/manifest.json @@ -0,0 +1,28 @@ +{ + "manifest_version": 2, + "name": "⚡️ Desktop AMP", + "description": "Load the AMP version of a page if available", + "version": "1.2", + "author": "Agustin Mendez", + + "applications": { + "gecko": { + "id": "desktop-amp@matagus", + "strict_min_version": "42.0.0" + } + }, + + "content_scripts": [ + { + "matches": [""], + "run_at": "document_start", + "js": ["amp.js"] + } + ], + + "icons": { + "16": "icon16.png", + "48": "icon48.png", + "128": "icon128.png" + } +}