datawebring

A webring for data people who write
git clone https://git.eamoncaddigan.net/datawebring.git
Log | Files | Refs | README

commit 20078c3be43668ed43f5432e9ca5f0b2c386224f
parent 8bc210929d3bbfd7ed15b6c7deee964be72b4bdc
Author: Randy Au <randy.au@gmail.com>
Date:   Fri, 20 Sep 2024 12:18:48 -0400

Add onionring code

src: https://garlic.garden/onionring
Diffstat:
Aonionring-index.js | 20++++++++++++++++++++
Aonionring-variables.js | 30++++++++++++++++++++++++++++++
Aonionring-widget.js | 72++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aonionring.css | 36++++++++++++++++++++++++++++++++++++
4 files changed, 158 insertions(+), 0 deletions(-)

diff --git a/onionring-index.js b/onionring-index.js @@ -0,0 +1,20 @@ +// onionring.js is made up of four files - onionring-widget.js, onionring-index.js (this one!), onionring-variables.js, and onionring.css +// it's licensed under the cooperative non-violent license (CNPL) v4+ (https://thufie.lain.haus/NPL.html) +// it was originally made by joey + mord of allium (蒜) house, last updated 2020-11-24 + +// === ONIONRING-INDEX === +//this file builds the list of sites in the ring for displaying on your index page + +var tag = document.getElementById('index'); +regex = /^https:\/\/|\/$/g; //strips the https:// and trailing slash off the urls for aesthetic purposes + +list = ""; +for (i = 0; i < sites.length; i++) { + list += `<li><a href='${sites[i]}'>${sites[i].replace(regex, "")}</a></li>`; +} + +tag.insertAdjacentHTML('afterbegin', ` +<ul> +${list} +</ul> +`); diff --git a/onionring-variables.js b/onionring-variables.js @@ -0,0 +1,30 @@ +// onionring.js is made up of four files - onionring-widget.js, onionring-index.js, onionring-variables.js (this one!), and onionring.css +// it's licensed under the cooperative non-violent license (CNPL) v4+ (https://thufie.lain.haus/NPL.html) +// it was originally made by joey + mord of allium (蒜) house, last updated 2020-11-24 + +// === ONIONRING-VARIABLES === +//this file contains the stuff you edit to set up your specific webring + +//the full URLs of all the sites in the ring +var sites = [ +'https://example.com/', +'https://example.com/', +'https://example.com/', +'https://example.com/' +]; + +//the name of the ring +var ringName = 'My Ring'; + +/* the unique ID of the widget. two things to note: + 1) make sure there are no spaces in it - use dashes or underscores if you must + 2) remember to change 'webringid' in the widget code you give out and all instances of '#webringid' in the css file to match this value!*/ +var ringID = 'my-ring'; + +//should the widget include a link to an index page? +var useIndex = false; +//the full URL of the index page. if you're not using one, you don't have to specify anything here +var indexPage = 'https://example.com/index.html'; + +//should the widget include a random button? +var useRandom = true; diff --git a/onionring-widget.js b/onionring-widget.js @@ -0,0 +1,72 @@ +// onionring.js is made up of four files - onionring-widget.js (this one!), onionring-index.js, onionring-variables.js and onionring.css +// it's licensed under the cooperative non-violent license (CNPL) v4+ (https://thufie.lain.haus/NPL.html) +// it was originally made by joey + mord of allium (蒜) house, last updated 2020-11-24 + +// === ONIONRING-WIDGET === +//this file contains the code which builds the widget shown on each page in the ring. ctrl+f 'EDIT THIS' if you're looking to change the actual html of the widget + +var tag = document.getElementById(ringID); //find the widget on the page + +thisSite = window.location.href; //get the url of the site we're currently on +thisIndex = null; + +// go through the site list to see if this site is on it and find its position +for (i = 0; i < sites.length; i++) { + if (thisSite.startsWith(sites[i])) { //we use startswith so this will match any subdirectory, users can put the widget on multiple pages + thisIndex = i; + break; //when we've found the site, we don't need to search any more, so stop the loop + } +} + +function randomSite() { + otherSites = sites.slice(); //create a copy of the sites list + otherSites.splice(thisIndex, 1); //remove the current site so we don't just land on it again + randomIndex = Math.floor(Math.random() * otherSites.length); + location.href = otherSites[randomIndex]; +} + +//if we didn't find the site in the list, the widget displays a warning instead +if (thisIndex == null) { + tag.insertAdjacentHTML('afterbegin', ` +<table> + <tr> + <td>This site isn't part of the ${ringName} webring yet. You should talk to the manager to have your site added to the list!</td> + </tr> +</table> + `); +} +else { + //find the 'next' and 'previous' sites in the ring. this code looks complex + //because it's using a shorthand version of an if-else statement to make sure + //the first and last sites in the ring join together correctly + previousIndex = (thisIndex-1 < 0) ? sites.length-1 : thisIndex-1; + nextIndex = (thisIndex+1 >= sites.length) ? 0 : thisIndex+1; + + indexText = "" + //if you've chosen to include an index, this builds the link to that + if (useIndex) { + indexText = `<a href='${indexPage}'>index</a> | `; + } + + randomText = "" + //if you've chosen to include a random button, this builds the link that does that + if (useRandom) { + randomText = `<a href='javascript:void(0)' onclick='randomSite()'>random</a> | `; + } + + //this is the code that displays the widget - EDIT THIS if you want to change the structure + tag.insertAdjacentHTML('afterbegin', ` + <table> + <tr> + <td class='webring-prev'><a href='${sites[previousIndex]}'>← previous</a></td> + <td class='webring-info'>This site is part of the ${ringName} webring</br> + <span class='webring-links'> + ${randomText} + ${indexText} + <a href='https://garlic.garden/onionring/'>what is this?</a></span></td> + <td class='webring-next'><a href='${sites[nextIndex]}'>next →</a></td> + </tr> + </table> + `); + +} diff --git a/onionring.css b/onionring.css @@ -0,0 +1,36 @@ +/* onionring.js is made up of four files - onionring-widget.js, onionring-index.js, onionring-variables.js and onionring.css (this one!) +// it's licensed under the cooperative non-violent license (CNPL) v4+ (https://thufie.lain.haus/NPL.html) +// it was originally made by joey + mord of allium (蒜) house, last updated 2020-10-24 */ + +/* === ONIONRING.CSS === */ +/* this file affects the style of the widget. remember to replace all instances of #webringid with whatever value you have for ringID in the onionring-widget.js file. make sure it still has the # at the front, though! probably easiest to use find+replace to do it */ + +#webringid { + margin: 0 auto; + padding: 15px; /* creates some space around the widget */ +} + +#webringid table { + background-color: #ffffff; /* makes the background pure white */ + margin: 0 auto; /* centers the widget */ +} + +#webringid table tr td { + padding: 15px; /* creates some space between the links and text inside the widget */ +} + +#webringid .webring-prev { + text-align:right; +} + +#webringid .webring-info { + text-align:center; +} + +#webringid .webring-next { + text-align:left; +} + +#webringid .webring-links { + font-size:small; +}