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