NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Log PMO Cache
// @namespace inge.org.uk/userscripts
// @description Allows allows non-Premium Members to conveniently log Premium Member Only caches on geocaching.com
// @include https://www.geocaching.com/geocache/*
// @author JRI
// @oujs:author JRI
// @license MIT; http://www.opensource.org/licenses/mit-license.php
// @copyright 2016, 2020, James Inge (http://geo.inge.org.uk/)
// @version 0.0.2
// @icon https://www.geocaching.com/images/logtypes/48/2.png
// @grant none
// @updateURL https://geo.inge.org.uk/userscripts/Log_PMO_Cache.meta.js
// @downloadURL https://openuserjs.org/install/JRI/Log_PMO_Cache.user.js
// ==/UserScript==
/* jshint esversion: 6 */
/*jslint browser, devel */
(function () {
"use strict";
const scriptId = 'Log PMO Cache v0.0.2';
const css = `div.CacheDetailNavigation {border-radius: 3px; background-color: #f0edeb;}
.btn {margin: 1em 0;}`;
// Takes the GCxxxxx code and constructs HTML text representing the "Log Visit" button
const buildHTML = (code) => `<div class="CacheDetailNavigation NoPrint"><a href="/play/geocache/${code}/log" id="ctl00_ContentBody_GeoNav_logButton" class="btn btn-primary">Log a new visit</a></div>`;
function getGCCode() {
// Get the GCxxxxx code from the cache listing
const codes = document.getElementsByClassName('li__gccode');
var theCode;
if (codes.length > 0) {
// Remove any markup
theCode = (codes[0].textContent || codes[0].innerText);
// Remove whitespace padding
return theCode.trim();
}
}
function getSidebar() {
const sbs = document.getElementsByClassName('sidebar');
return (sbs ? sbs[0]: void 0);
}
function injectCSS(code) {
const style = document.createElement('style');
style.type = 'text/css';
if (style.styleSheet) {
// IE
style.styleSheet.cssText = code;
} else {
// Other browsers
style.innerHTML = code;
}
document.getElementsByTagName('head')[0].appendChild(style);
}
const pmoBanner = document.getElementsByClassName('premium-upgrade-widget');
if (pmoBanner.length !== 1) {
// Doesn't seem to be a PMO cache, so quit silently.
return;
}
const gccode = getGCCode();
if (!gccode) {
console.error(`${scriptId}couldn't work out the GC code of the cache`);
return;
}
const sidebar = getSidebar();
if (!sidebar) {
console.error(`${scriptId}couldn't find where to insert its link`);
return;
}
console.info(scriptId);
const logDiv = document.createElement('div');
injectCSS(css);
logDiv.id = 'pmo-log-div';
logDiv.innerHTML = buildHTML(gccode);
sidebar.insertBefore(logDiv, sidebar.firstChild);
}());