# Summary I wanted the ability to join this webring without having to add javascript to my page or referencing external scripts that I do not have control over, so I coded out this solution. The flow is simple: The links in the webring direct the user/clicker to a page that is hosted on your server called /redirect or /redirect.html. Once they hit that page, javascript runs on your server that redirects the user to the next page in the webring.

the referrer and the "direction" or "type of movement" of the webring (next, prev, random) are handled by query string parameters. so when a user who is currently on www.xyz.com and they click next on a webring link it will first go to: https://christian-webring.nekoweb.org/redirect?referrer=https://www.xyz.com&type=next. the redirect script takes care of the rest by reading the list of sites in the onionring js variables script, and determining the next, previous or random website. once determined the user is redirected to the correct page. this all happens quickly and seamlessly.

Code For End Users:

this allows the end users to just put vanilla HTML on their site without having to import packages and using javascript,
If you are interested we can put a form up so that a user can input their url and it will auto generate the code for them ```
-prev-
random
-next-
```

How To Implement

- Create a page on your site called redirect
- Create a js script to redirect users
- place that script on the redirect page

redirect.js

``` function getRandomSite(ignore) { // get random index from sites var index = Math.floor(Math.random() * sites.length); // if random site is referrer, retry return (index === ignore) ? generateRandom(ignore) : sites[index]; } var validRedirectTypes = ['next', 'previous', 'random'] // parse url params var params = new URLSearchParams(window.location.search); var referrerUrl = params.get('referrer') var type = params.get('type') || 'random' // default to random if no type given if (!validRedirectTypes.includes(type)) { // default to random is type not valid type = 'random' } if (!sites.includes(referrerUrl)) { // referrer url is incorrect, select random referrer from sites list, referrerUrl = sites[Math.floor(Math.random() * sites.length)] // select random site, and redirect to it window.location.href = sites[Math.floor(Math.random() * sites.length)] } // get index of the referrer url var referrerIndex = sites.indexOf(referrerUrl); if (type === 'random') { var redirect = getRandomSite(referrerIndex) } else if (type === 'next') { // get index of next website in list var nextIndex = referrerIndex + 1 console.log(nextIndex) // if index is greater than the length of list, loop back to 0 index if (nextIndex > sites.length - 1) { nextIndex = 0 } var redirect = sites[nextIndex] } else { // redirect to previous var previousIndex = referrerIndex - 1 if (previousIndex < 0) { // if previous index is less than 0, loop around to last index previousIndex = sites.length - 1 } var redirect = sites[previousIndex] } window.location.href = redirect ```

Redirect Page

``` ```