on master help sign in
404.html+2−2
since splitsnapshots
unifiedsplit
@@ -9,8 +9,8 @@ permalink: /404.html
9</head>
9</head>
10<body style='background:black'>
10<body style='background:black'>
11 <script>
11 <script>
12− var parts = window.location.pathname.split("/")
12+ const parts = window.location.pathname.split("/")
13− var target = parts.slice(-1);
13+ const target = parts.slice(-1);
14 parts.splice(-1)
14 parts.splice(-1)
15 document.location.href = parts.join("/")+"/#"+target
15 document.location.href = parts.join("/")+"/#"+target
16 </script>
16 </script>
README.md+9−2
@@ -1,6 +1,6 @@
1# Webring
1# Webring
2
2
3−This [webring](https://wiki.xxiivv.com/webring) is an attempt to inspire artists & developers to create and maintain their own website and share traffic among each other. The webring's aim is to share personal websites such as *diaries, wikis & portfolios*. To add yourself to the ring, submit an [edit](https://github.com/XXIIVV/webring/edit/master/index.html) to this repository.
3+This [webring](https://wiki.xxiivv.com/webring) is an attempt to inspire artists & developers to create and maintain their own website and share traffic among each other. The webring's aim is to share hand-crafted websites such as **diaries, wikis & portfolios**, single pagers with nothing but outgoing links to social platforms will be rejected. To add yourself to the ring, submit an [edit](https://github.com/XXIIVV/webring/edit/master/scripts/sites.js) to this repository.
4
4
5## Join the webring
5## Join the webring
6
6
@@ -9,7 +9,7 @@ This [webring](https://wiki.xxiivv.com/webring) is an attempt to inspire artists
9```
9```
10
10
11- Add the webring icon to your website html.
11- Add the webring icon to your website html.
12−- Add your website url to the [index.html](https://github.com/XXIIVV/webring/edit/master/index.html)
12+- Add your website url to the [sites.js](https://github.com/XXIIVV/webring/edit/master/scripts/sites.js) file.
13- Submit a Pull Request with the location of the webring icon on your site.
13- Submit a Pull Request with the location of the webring icon on your site.
14
14
15Alternatively, if you your website has a dark background, use `icon.white.svg`. If your website is complaning about *https*, go ahead and host the icon yourself.
15Alternatively, if you your website has a dark background, use `icon.white.svg`. If your website is complaning about *https*, go ahead and host the icon yourself.
@@ -22,6 +22,13 @@ Instead of linking to the directory, you can also link to the next link in the r
22<a href='https://webring.xxiivv.com/#wiki.xxiivv' target='_blank'><img src='https://webring.xxiivv.com/icon.black.svg'/></a>
22<a href='https://webring.xxiivv.com/#wiki.xxiivv' target='_blank'><img src='https://webring.xxiivv.com/icon.black.svg'/></a>
23```
23```
24
24
25+## API
26+
27+This repository does not contain mature API capabilities, but there is one way to request list of sites currently in the webring.
28+
29+- Request [sites.js on xxiivv](https://webring.xxiivv.com/scripts/sites.js) or [sites.js on github](https://raw.githubusercontent.com/XXIIVV/webring/master/scripts/sites.js)
30+- Parse it as text from `[` to `]`, split by `,` and then trim all whitespace and `"` in resulting array.
31+
25## Need Help?
32## Need Help?
26
33
27The ring is managed by [@neauoire](https://twitter.com/neauoire), but any member of the network is also welcome to join this repository as a collaborator to help manage new links and Pull Requests. Read more [here](https://wiki.xxiivv.com/webring).
34The ring is managed by [@neauoire](https://twitter.com/neauoire), but any member of the network is also welcome to join this repository as a collaborator to help manage new links and Pull Requests. Read more [here](https://wiki.xxiivv.com/webring).
index.html+3−63
@@ -6,73 +6,13 @@
6 <link rel="stylesheet" type="text/css" href="links/fonts.css"/>
6 <link rel="stylesheet" type="text/css" href="links/fonts.css"/>
7 <link rel="stylesheet" type="text/css" href="links/main.css"/>
7 <link rel="stylesheet" type="text/css" href="links/main.css"/>
8 <script src="scripts/portal.js"></script>
8 <script src="scripts/portal.js"></script>
9+ <script src="scripts/sites.js"></script>
9 <title>Webring</title>
10 <title>Webring</title>
10</head>
11</head>
11<body>
12<body>
12 <script>
13 <script>
13− // protocole://url.domain.ext
14− var sites = [
15− "https://wiki.xxiivv.com"
16− , "http://estevancarlos.com"
17− , "https://electro.pizza"
18− , "http://xla.wiki"
19− , "https://monochromatic.co"
20− , "https://joshavanier.github.io"
21− , "http://kaemura.com"
22− , "https://liamcooke.com"
23− , "https://electricgecko.de"
24− , "https://wichniow.ski"
25− , "https://hraew.autophagy.io"
26− , "https://evenunto.net"
27− , "https://anxl.faith"
28− , "https://xvw.github.io"
29− , "https://heracl.es"
30− , "https://felipecortez.net"
31− , "http://rukial.tk"
32− , "http://luminghao.com"
33− , "http://silane.pw"
34− , "https://theiceshelf.com"
35− , "https://turelio.github.io"
36− , "https://spaceshipsin.space"
37− , "http://log.lectronice.com"
38− , "https://craze.co.uk"
39− , "https://shaneckel.com"
40− , "https://cblgh.org"
41− , "https://ellugar.co"
42− , "http://hur.bet"
43− , "http://chigby.org"
44− , "https://0101.solar"
45− , "https://longest.voyage"
46− , "https://palomakop.tv"
47− , "https://travisshears.com"
48− , "https://v-os.ca"
49− , "http://secretinternet.club"
50− , "https://jmandel.xyz"
51− , "https://systems.ws"
52− , "https://jamesin.space"
53− , "https://nathanwentworth.co"
54− , "https://eswat.ca"
55− , "https://uonai.space"
56− , "http://controls.ee"
57− , "https://wasin.io"
58− , "https://inns.studio"
59− , "http://kokorobot.ca"
60− , "https://ameyama.com"
61− , "https://wake.st"
62− , "https://xarene.la"
63− , "https://alex.zyzhang.me"
64− , "http://bildwissenschaft.vortok.info"
65− , "https://jakofranko.github.com"
66− , "https://aeriform.io"
67− , "http://blog.lucasdidthis.com"
68− , "http://npisanti.com"
69− , "https://underscorediscovery.ca"
70− , "https://drisc.io"
71− , "https://neufv.website"
72− , "https://simbolo.xyz"
73− // Don't forget the comma! No trailing slashes
74− ]
75− var portal = new Portal(sites);
14+ const portal = new Portal(sites);
15+ portal.install(document.body);
76 portal.start();
16 portal.start();
77 </script>
17 </script>
78</body>
18</body>
links/fonts.css+8−15
@@ -1,22 +1,15 @@
1/* Input Mono */
1/* Input Mono */
2
2
3@font-face {
3@font-face {
4− font-family: 'input_mono_regular';
4+ font-family: 'input_mono_regular';
5− src: url('../media/fonts/input_mono_regular.ttf') format('truetype');
5+ src: url('../media/fonts/input_mono_regular.ttf') format('truetype');
6− font-weight: normal;
6+ font-weight: normal;
7− font-style: normal;
7+ font-style: normal;
8}
8}
9
9
10@font-face {
10@font-face {
11− font-family: 'input_mono_medium';
11+ font-family: 'input_mono_medium';
12− src: url('../media/fonts/input_mono_medium.ttf') format('truetype');
12+ src: url('../media/fonts/input_mono_medium.ttf') format('truetype');
13− font-weight: normal;
14− font-style: normal;
15−}
16−
17−@font-face {
18− font-family: 'input_mono_thin';
19− src: url('../media/fonts/input_mono_thin.ttf') format('truetype');
20− font-weight: normal;
13+ font-weight: normal;
21− font-style: normal;
14+ font-style: normal;
22}
15}
links/main.css+10−8
@@ -1,3 +1,5 @@
1+* { margin:0;padding:0;border:0;outline:0;text-decoration:none;font-weight:inherit;font-style:inherit;color:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;list-style:none;border-collapse:collapse;border-spacing:0; -webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;}
2+
1body { background:#f4f4f4; padding:0px; margin:0px; }
3body { background:#f4f4f4; padding:0px; margin:0px; }
2body div { display:block; background: #ddd;min-height: calc(100vh - 60px);width: calc(100vw - 60px);margin: 15px;color: #555;padding: 15px;font-family:'input_mono_regular', 'Monospaced','Courier New',courier;font-size:11px; position: relative; border-radius: 2px }
4body div { display:block; background: #ddd;min-height: calc(100vh - 60px);width: calc(100vw - 60px);margin: 15px;color: #555;padding: 15px;font-family:'input_mono_regular', 'Monospaced','Courier New',courier;font-size:11px; position: relative; border-radius: 2px }
3body div #icon { display: block;width: 30px;height: 30px;background-image: url(../icon.white.svg);background-size: cover;background-repeat: no-repeat;position: absolute;bottom: 10px;right:10px;background-position: center;padding:0px }
5body div #icon { display: block;width: 30px;height: 30px;background-image: url(../icon.white.svg);background-size: cover;background-repeat: no-repeat;position: absolute;bottom: 10px;right:10px;background-position: center;padding:0px }
@@ -6,12 +8,12 @@ body div p a { color:black; text-decoration: none; text-decoration: underline;}
6body div p a:hover { text-decoration: underline; }
8body div p a:hover { text-decoration: underline; }
7body div p b { font-weight: normal; color:#000; font-family: 'input_mono_medium' }
9body div p b { font-weight: normal; color:#000; font-family: 'input_mono_medium' }
8body div p.readme { max-width:500px; }
10body div p.readme { max-width:500px; }
9−body div list { display:block; max-width: 800px; columns:3; border-bottom: 2px solid white;padding-bottom: 15px;margin-bottom:15px; overflow: hidden;}
11+body div ul { display:block; max-width: 800px; columns:3; border-bottom: 2px solid white;padding-bottom: 15px;margin-bottom:15px; overflow: hidden;}
10−body div list ln { width: 22em; display:block; padding-left:5px; overflow: hidden; text-overflow: ellipsis; }
12+body div ul li { width: 22em; display:block; padding-left:5px; overflow: hidden; text-overflow: ellipsis; }
11−body div list ln a { line-height: 20px; display: inline-block; color:#000; padding:0px 5px; text-decoration: none;}
13+body div ul li a { line-height: 20px; display: inline-block; color:#000; padding:0px 5px; text-decoration: none;}
12−body div list ln a:visited { color:#999; text-decoration: none;}
14+body div ul li a:visited { color:#999; text-decoration: none;}
13−body div list ln a:hover { background:#ccc; color:#000; text-decoration: none; border-radius: 2px }
15+body div ul li a:hover { background:#ccc; color:#000; text-decoration: none; border-radius: 2px }
14
16
15−@media (max-width: 950px) {
17+@media (max-width: 950px){
16− body div list { columns: 2 }
18+ body div ul { columns: 2 }
17−}
19+}
media/fonts/input_mono_thin.ttfdeleted

Binary file not shown.

scripts/portal.js+43−65
@@ -1,85 +1,63 @@
1+'use strict'
2+
1−function Portal(sites)
3+function Portal (sites) {
2−{
3− this.el = document.createElement("div");
4+ this.el = document.createElement('div')
4− this.sites = sites;
5+ this.sites = sites
5−
6+
6− this.install = function()
7+ // Templates
7− {
8+
8− document.body.appendChild(this.el);
9+ function _readme () {
10+ return `<p class='readme'>This webring is an attempt to inspire artists & developers to build their own website and share traffic among each other. The ring welcomes personalized websites such as <b>diaries, wikis & portfolios</b>.</p><p>To add yourself to the ring, submit a <a href='https://github.com/XXIIVV/webring/edit/master/scripts/sites.js' target='_blank'>Pull Request</a>.<br />If you found a broken link, please <a href='https://github.com/XXIIVV/webring/issues/new' target='_blank'>report it</a>.</p>`
9 }
11 }
10−
12+
11− this.start = function()
13+ function _buttons () {
12− {
14+ return `<p class='buttons'><a href='#random' onClick="portal.reload('random')">Random</a> | <a href='https://github.com/XXIIVV/webring'>Information</a> <a id='icon' href='#random' onClick="portal.reload('random')"></a></p>`
13− this.install();
14− this.el.innerHTML = window.location.hash && window.location.hash.length > 4 ? this.redirect() : this.directory();
15 }
15 }
16
16
17− this.readme = function()
17+ function _directory (sites) {
18− {
18+ return `
19− return `<p class='readme'>This webring is an attempt to inspire artists & developers to build their own website and share traffic among each other. The ring welcomes personalized websites such as <b>diaries, wikis & portfolios</b>.</p><p>To add yourself to the ring, submit a <a href='https://github.com/XXIIVV/webring/edit/master/index.html' target='_blank'>Pull Request</a>.<br />If you found a broken link, please <a href='https://github.com/XXIIVV/webring/issues/new' target='_blank'>report it</a>.</p>`
19+ <ul>${sites.reduce((acc, val, id) => { return `${acc}<li>${id}) <a href='${val}'>${val.split('//')[1]}</a></li>` }, '')}</ul>\n${_readme()}${_buttons()}`
20 }
20 }
21
21
22− this.buttons = function()
22+ function _redirect (target) {
23− {
23+ return `<p>Redirecting to <b>${target}</b></p><meta http-equiv="refresh" content="3; url=${target}">
24− return `<p class='buttons'><a href='#random' onClick="portal.reload('random')">Random</a> | <a href='https://github.com/XXIIVV/webring'>Information</a> <a id='icon' href='#random' onClick="portal.reload('random')"></a></p>`
24+ <p class='buttons'><a href='#' onClick="portal.reload('')">Directory</a> | <a href='#${target}' onClick="portal.reload('random')">Skip</a> | <a href='#random' onClick="portal.reload('random')">Random</a> | <a href='https://github.com/XXIIVV/webring'>Information</a> <a id='icon' href='#random' onClick="portal.reload('random')"></a></p>`
25 }
25 }
26−
26+
27− this.directory = function()
27+ //
28− {
28+
29− var html = ""
29+ this.install = function (host) {
30−
30+ host.appendChild(this.el)
31− for(var id in this.sites){
32− var site = this.sites[id]
33− html += `<ln>${id}) <a href='${site}'>${site.split("//")[1]}</a></ln>`
34− }
35− return `<list>${html}</list>\n${this.readme()}${this.buttons()}`
36 }
31 }
37
32
38− this.reload = function()
33+ this.start = function () {
39− {
34+ this.el.innerHTML = window.location.hash && window.location.hash.length > 4 ? _redirect(this.next()) : _directory(this.sites)
40− setTimeout(()=>{ window.location.reload() },500)
41 }
35 }
42
36
43− this.navigate = function(target)
37+ this.reload = function () {
44− {
45− setTimeout(() => {
46− window.location.href = target
38+ setTimeout(() => { window.location.reload() }, 500)
47− },3000)
48 }
39 }
49−
40+
50− this.location = function()
41+ this.navigate = function (target) {
51− {
42+ setTimeout(() => { window.location.href = target }, 3000)
52− return window.location.hash.replace("#","").trim();
53 }
43 }
54−
44+
55− this.locate = function()
45+ this.locate = function () {
56− {
57− var hash = this.location();
46+ const hash = window.location.hash.replace('#', '').trim()
58−
47+
59− if(hash == "random"){
48+ if (hash == 'random') {
60− return Math.floor(Math.random()*this.sites.length)
49+ return Math.floor(Math.random() * this.sites.length)
61 }
50 }
62−
51+
63− for(var id in this.sites){
52+ for (const id in this.sites) {
64− var site = this.sites[id];
65− if(site.indexOf(hash) >-1){
53+ if (this.sites[id].indexOf(hash) > -1) {
66 return parseInt(id)
54 return parseInt(id)
67 }
55 }
68 }
56 }
69 return -1
57 return -1
70 }
58 }
71−
59+
72− this.next = function(loc)
60+ this.next = function (loc = this.locate()) {
73− {
74− return loc == this.sites.length-1 ? this.sites[0] : this.sites[loc+1];
61+ return loc == this.sites.length - 1 ? this.sites[0] : this.sites[loc + 1]
75− }
76−
77− this.redirect = function()
78− {
79− var location = this.locate();
80− var target = this.next(location);
81− this.navigate(target)
82− return `<p>Redirecting to <b>${target}</b></p><meta http-equiv="refresh" content="3; url=${target}">
83− <p class='buttons'><a href='#' onClick="portal.reload('')">Directory</a> | <a href='#${target}' onClick="portal.reload('random')">Skip</a> | <a href='#random' onClick="portal.reload('random')">Random</a> | <a href='https://github.com/XXIIVV/webring'>Information</a> <a id='icon' href='#random' onClick="portal.reload('random')"></a></p>`
84 }
62 }
85}
63}
scripts/sites.jsnew file+70
@@ -0,0 +1,70 @@
1+'use strict';
2+
3+// Don't forget the comma! No trailing slashes
4+// protocole://url.domain.ext
5+
6+const sites = [
7+ "https://wiki.xxiivv.com"
8+ , "http://estevancarlos.com"
9+ , "https://electro.pizza"
10+ , "https://monochromatic.co"
11+ , "https://joshavanier.github.io"
12+ , "http://kaemura.com"
13+ , "https://liamcooke.com"
14+ , "https://electricgecko.de"
15+ , "https://wichniow.ski"
16+ , "https://hraew.autophagy.io"
17+ , "https://evenunto.net"
18+ , "https://anxl.faith"
19+ , "https://xvw.github.io"
20+ , "https://heracl.es"
21+ , "https://felipecortez.net"
22+ , "http://luminghao.com"
23+ , "https://theiceshelf.com"
24+ , "https://turelio.github.io"
25+ , "https://spaceshipsin.space"
26+ , "http://log.lectronice.com"
27+ , "https://craze.co.uk"
28+ , "https://shaneckel.com"
29+ , "https://cblgh.org"
30+ , "https://ellugar.co"
31+ , "http://hur.bet"
32+ , "http://chigby.org"
33+ , "https://longest.voyage"
34+ , "https://palomakop.tv"
35+ , "https://travisshears.com"
36+ , "https://v-os.ca"
37+ , "http://secretinternet.club"
38+ , "https://jmandel.xyz"
39+ , "https://systems.ws"
40+ , "https://jamesin.space"
41+ , "https://nathanwentworth.co"
42+ , "https://eswat.ca"
43+ , "https://uonai.space"
44+ , "http://controls.ee"
45+ , "https://wasin.io"
46+ , "https://inns.studio"
47+ , "http://kokorobot.ca"
48+ , "https://ameyama.com"
49+ , "https://wake.st"
50+ , "https://xarene.la"
51+ , "https://alex.zyzhang.me"
52+ , "http://bildwissenschaft.vortok.info"
53+ , "https://jakofranko.github.com"
54+ , "https://aeriform.io"
55+ , "http://blog.lucasdidthis.com"
56+ , "http://npisanti.com"
57+ , "https://underscorediscovery.ca"
58+ , "https://drisc.io"
59+ , "https://neufv.website"
60+ , "https://simbolo.xyz"
61+ , "https://ricky.codes"
62+ , "https://maxdeviant.com"
63+ , "https://tynandebold.com"
64+ , "http://gytis.co"
65+ , "https://nomand.co"
66+ , "http://memoriata.com"
67+ , "https://mmm.s-ol.nu"
68+ , "https://chad.is"
69+ , "https://smidgeo.com/bots"
70+];