NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Geocache QR Code // @namespace inge.org.uk/userscripts // @description Allows you to display a QR code linking to a geocache or trackable listing on geocaching.com // @include https://www.geocaching.com/geocache/GC* // @include https://www.geocaching.com/map* // @include https://www.geocaching.com/track/details.aspx* // @oujs:author JRI // @license MIT; http://www.opensource.org/licenses/mit-license.php // @copyright 2011-19, James Inge (http://geo.inge.org.uk/) // @version 1.2.3 // @icon https://raw.githubusercontent.com/JRInge/userscripts/master/GeocacheQRCode/QRicon48.png // @icon64 https://raw.githubusercontent.com/JRInge/userscripts/master/GeocacheQRCode/QRicon64.png // @grant none // @updateURL https://geo.inge.org.uk/userscripts/Geocache_QR_Code.meta.js // @downloadURL https://openuserjs.org/install/JRI/Geocache_QR_Code.user.js // ==/UserScript== /*global window*/ (function () { "use strict"; const scriptId = "Geocache QR Code v1.2.3 "; const targetId = "qtip-0"; const source = document.getElementById('ctl00_ContentBody_CoordInfoLinkControl1_uxCoordInfoCode'); const template = document.getElementById('cacheDetailsTemplate'); const icon16 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAp5JREFUOE9tU0tLalEU%2Fo5FL4gyyUn5KFIoIYzEcYgD59JA8AcYSKPSBuGjCG0iNQiCQhCCQIgCDQcVhGCkvWgQRIU5iRoUgviM4NyzFtmNy%2F1gc9Y%2Be%2B1vr7W%2BtQS%2F3y%2FiFwKBAHK5HJ6fn9HX14fW1lZ8fn6iXC7DbrcjGAyio6MDoiiis7MTMtrQJVq1Wo1JXl5ecHR0BIPBgJubGyYaHx%2Fns2q1Cq%2FXi4WFBfaXCYLAB0TQtB8fHzE9PY2rqyu0tbXh%2BvoaXV1dfNb0kSJnW1av1%2FkyfWkR5ubmIJfLkc%2Fn4Xa7mSAWi%2FEZ%2BdDrP%2F5SLv%2FFzs6OKBGwHY1GxeXlZbZ%2FI5vNijKm%2FQd7e3tQKpXY39%2FnNCwWCxeO8PHxwV%2BC2WyGQExLS0tcqKGhIYyOjjJBe3s7Zmdn4XK5sLm5icvLS2i1WkQiEa4LgVLhCHw%2BHx8%2BPDxgYGAAMzMzuLi4YCedToenpydMTk5ia2sLX19f6OnpQXd3N97f39GiUqkC0sLExATOzs5Yc6p4f38%2FDg8PYTQaUSgUMDY2xlEUi0U4nU6W9eDgAEI6nRZPTk4wPDzMzPf39yiVSlhZWYFUPJhMJtzd3cHhcCCZTEKtVqNSqeD19RV6vR7C7u6uSJcIJCeBcqOiLS4u4vT0FFarlf8TQqEQd%2Bf8%2FDzvuYhs%2FUImk%2BEu7O3t%2Ff7zl5xAthQ5K9QidVMglUqB0qAQbTYbh%2Fn29vZDQA11e3vLr1KdpqamoNFouMA8C6urqwiHwz9ax%2BNxJiOcn5%2BzxATqUAKplUgksLGxAVkzAwqraVOzUAtvb29zM9GFkZERVmJwcBDHx8csM9VIWFtbE2mqaDCot2lI1tfX0Wg04PF4mEyhUDCx5MszQg%2BRUhqNBn8AvEtuCmtVR6cAAAAASUVORK5CYII%3D"; // Don't run on frames or iframes if (window.top !== window.self) { return false; } const addQR = () => { const i = document.createElement("img"); const target = document.getElementById(targetId); if (target) { i.src = "https://qrcode.kaywa.com/img.php?s=6&d=https://coord.info/" + (source.textContent || source.innerText); i.style.width = "186px"; i.style.height = "186px"; i.alt = "QR Code"; target.appendChild(i); target.style.height = "205px"; target.style.textAlign = "center"; } }; const observer = new MutationObserver((mutationsList, observer) => { for(const mutation of mutationsList) { for (const node of mutation.addedNodes) { if (node.id === targetId) { observer.disconnect(); addQR(); return; } } } }); if (source) { observer.observe(document.body, {childList: true, attributes: false, characterData: false}); } else { if (template) { template.textContent = template.textContent.replace(/<div\ class=\"links\ Clear\">/, `<div class="links Clear"> <a class="lnk" id="jri-qr-link" onclick="$.fancybox(\'<img width=\\\\\\\'186px\\\\\\\' src=\\\\\\\'https://qrcode.kaywa.com/img.php?s=6&d=https://coord.info/{{=gc}}\\\\\\\'>\');"><img src="${icon16}" /><span>QR</span></a>`); } else { console.error(`${scriptId}didn't understand page structure.`); return; } } console.info(scriptId); }());