mirror of
https://github.com/LalleSX/4chan-XZ.git
synced 2025-10-07 07:22:37 +02:00
95 lines
2.6 KiB
JavaScript
95 lines
2.6 KiB
JavaScript
import { Conf, doc, g } from '../globals/globals'
|
|
import Main from '../main/Main'
|
|
import $ from '../platform/$'
|
|
import { dict } from '../platform/helpers'
|
|
import SW from './SW'
|
|
|
|
/*
|
|
* decaffeinate suggestions:
|
|
* DS102: Remove unnecessary code created because of implicit returns
|
|
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md
|
|
*/
|
|
var Site = {
|
|
defaultProperties: {
|
|
'4chan.org': { software: 'yotsuba' },
|
|
'4channel.org': { canonical: '4chan.org' },
|
|
'4cdn.org': { canonical: '4chan.org' },
|
|
'notso.smuglo.li': { canonical: 'smuglo.li' },
|
|
'smugloli.net': { canonical: 'smuglo.li' },
|
|
'smug.nepu.moe': { canonical: 'smuglo.li' },
|
|
},
|
|
|
|
init(cb) {
|
|
$.extend(Conf['siteProperties'], Site.defaultProperties)
|
|
let hostname = Site.resolve()
|
|
if (hostname && $.hasOwn(SW, Conf['siteProperties'][hostname].software)) {
|
|
this.set(hostname)
|
|
cb()
|
|
}
|
|
return $.onExists(doc, 'body', () => {
|
|
for (var software in SW) {
|
|
var changes
|
|
if ((changes = SW[software].detect?.())) {
|
|
changes.software = software
|
|
hostname = location.hostname.replace(/^www\./, '')
|
|
var properties =
|
|
Conf['siteProperties'][hostname] ||
|
|
(Conf['siteProperties'][hostname] = dict())
|
|
var changed = 0
|
|
for (var key in changes) {
|
|
if (properties[key] !== changes[key]) {
|
|
properties[key] = changes[key]
|
|
changed++
|
|
}
|
|
}
|
|
if (changed) {
|
|
$.set('siteProperties', Conf['siteProperties'])
|
|
}
|
|
if (!g.SITE) {
|
|
this.set(hostname)
|
|
cb()
|
|
}
|
|
return
|
|
}
|
|
}
|
|
})
|
|
},
|
|
|
|
resolve(url = location) {
|
|
let { hostname } = url
|
|
while (hostname && !$.hasOwn(Conf['siteProperties'], hostname)) {
|
|
hostname = hostname.replace(/^[^.]*\.?/, '')
|
|
}
|
|
if (hostname) {
|
|
let canonical
|
|
if ((canonical = Conf['siteProperties'][hostname].canonical)) {
|
|
hostname = canonical
|
|
}
|
|
}
|
|
return hostname
|
|
},
|
|
|
|
parseURL(url) {
|
|
const siteID = Site.resolve(url)
|
|
return Main.parseURL(g.sites[siteID], url)
|
|
},
|
|
|
|
set(hostname) {
|
|
for (var ID in Conf['siteProperties']) {
|
|
var site
|
|
var properties = Conf['siteProperties'][ID]
|
|
if (properties.canonical) {
|
|
continue
|
|
}
|
|
var { software } = properties
|
|
if (!software || !$.hasOwn(SW, software)) {
|
|
continue
|
|
}
|
|
g.sites[ID] = site = Object.create(SW[software])
|
|
$.extend(site, { ID, siteID: ID, properties, software })
|
|
}
|
|
return (g.SITE = g.sites[hostname])
|
|
},
|
|
}
|
|
export default Site
|