'use strict'
function Portal (sites) {
this.el = document.createElement('div')
this.el.id = 'portal'
this.sites = sites
// Templates
function _readme () {
return `
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 diaries, wikis & portfolios.
To add yourself to the ring, submit a Pull Request.
If you found a broken link, please report it.
`
}
function _buttons () {
return `Random | Information | The Hallway | The Wiki | OPML
`
}
function _directory (sites) {
return `
\n${_readme()}${_buttons()}`
}
function _name (site) {
return site.title || `${site.url.split('//')[1]}`
}
function _redirect (site) {
return `
Directory | Skip | Random | Information
`
}
//
this.install = function (host) {
host.appendChild(this.el)
}
this.start = function () {
this.el.innerHTML = window.location.hash && window.location.hash.length > 4 ? _redirect(this.next()) : _directory(this.sites)
}
this.reload = function () {
setTimeout(() => { window.location.reload() }, 500)
}
this.navigate = function (target) {
setTimeout(() => { window.location.href = target }, 3000)
}
this.locate = function () {
const hash = window.location.hash.replace('#', '').trim()
if (hash == 'random') {
return Math.floor(Math.random() * this.sites.length)
}
for (const id in this.sites) {
const site = this.sites[id]
if (site.url.indexOf(hash) > -1) {
return parseInt(id)
}
}
return -1
}
this.next = function (loc = this.locate()) {
return loc == this.sites.length - 1 ? this.sites[0] : this.sites[loc + 1]
}
}