on d763bb2 help sign in
webring/scripts/portal.js
63 lines 2.5 kB history raw
1'use strict'
3function Portal (sites) {
4 this.el = document.createElement('div')
5 this.sites = sites
7 // Templates
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>`
11 }
13 function _buttons () {
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>`
15 }
17 function _directory (sites) {
18 return `
19 <ul>${sites.reduce((acc, val, id) => { return `${acc}<li>${id}) <a href='${val}'>${val.split('//')[1]}</a></li>` }, '')}</ul>\n${_readme()}${_buttons()}`
20 }
22 function _redirect (target) {
23 return `<p>Redirecting to <a href="${target}">${target}</a></p><meta http-equiv="refresh" content="3; url=${target}">
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 }
27 //
29 this.install = function (host) {
30 host.appendChild(this.el)
31 }
33 this.start = function () {
34 this.el.innerHTML = window.location.hash && window.location.hash.length > 4 ? _redirect(this.next()) : _directory(this.sites)
35 }
37 this.reload = function () {
38 setTimeout(() => { window.location.reload() }, 500)
39 }
41 this.navigate = function (target) {
42 setTimeout(() => { window.location.href = target }, 3000)
43 }
45 this.locate = function () {
46 const hash = window.location.hash.replace('#', '').trim()
48 if (hash == 'random') {
49 return Math.floor(Math.random() * this.sites.length)
50 }
52 for (const id in this.sites) {
53 if (this.sites[id].indexOf(hash) > -1) {
54 return parseInt(id)
55 }
56 }
57 return -1
58 }
60 this.next = function (loc = this.locate()) {
61 return loc == this.sites.length - 1 ? this.sites[0] : this.sites[loc + 1]
62 }