diff --git a/assets/instance_buttons.js b/assets/instance_buttons.js index 1cd4f1f..1aa517e 100644 --- a/assets/instance_buttons.js +++ b/assets/instance_buttons.js @@ -1,9 +1,9 @@ +const SLOTS = 5; + +import {known_load, known_save} from './known_instances.js'; + (function instance_buttons(){ - const SLOTS = 5; - - const STORAGE_KEY = 'forget_known_instances'; - const container = document.querySelector('#mastodon_instance_buttons'); const button_template = Function('first', 'instance', 'return `' + document.querySelector('#instance_button_template').innerHTML + '`;'); @@ -14,8 +14,7 @@ Function('return JSON.parse(`' + document.querySelector('#top_instances').innerHTML + '`);')(); async function get_known(){ - let known = JSON.parse(localStorage.getItem(STORAGE_KEY)); - let has_been_fetched = false; + let known = known_load(); if(!known){ let resp = await fetch('/api/known_instances'); if(resp.ok && resp.headers.get('content-type') == 'application/json'){ @@ -27,7 +26,7 @@ "hits": 0 }]; } - save(known) + known_save(known) fetch('/api/known_instances', {method: 'DELETE'}) } @@ -64,15 +63,12 @@ return head.concat(tail) } - function save(known){ - localStorage.setItem(STORAGE_KEY, JSON.stringify(known)); - } async function replace_buttons(){ let known = await get_known(); known = normalize(known); - save(known); + known_save(known); let filtered_top_instances = [] for(let instance of top_instances){ diff --git a/assets/known_instances.js b/assets/known_instances.js new file mode 100644 index 0000000..f75509f --- /dev/null +++ b/assets/known_instances.js @@ -0,0 +1,13 @@ +const STORAGE_KEY = 'forget_known_instances'; + +export function known_save(known){ + localStorage.setItem(STORAGE_KEY, JSON.stringify(known)); +} + +export function known_load(){ + let known = localStorage.getItem(STORAGE_KEY); + if(known){ + known = JSON.parse(known); + } + return known; +} diff --git a/assets/settings.js b/assets/settings.js index cc404c0..ab5df50 100644 --- a/assets/settings.js +++ b/assets/settings.js @@ -1,5 +1,6 @@ import Banner from '../components/Banner.html'; import ArchiveForm from '../components/ArchiveForm.html'; +import {known_load, known_save} from './known_instances.js' (function settings_init(){ if(!('fetch' in window)){ @@ -142,10 +143,12 @@ import ArchiveForm from '../components/ArchiveForm.html'; let last_viewer = {}; function update_viewer(viewer){ - if(last_viewer == JSON.stringify(viewer)){ + let dumped = JSON.stringify(viewer); + if(last_viewer == dumped){ + console.log('viewers is the same'); return; } - last_viewer = JSON.stringify(viewer); + last_viewer = dumped; document.querySelector('#post-count').textContent = viewer.post_count; document.querySelector('#eligible-estimate').textContent = viewer.eligible_for_delete_estimate; @@ -163,7 +166,9 @@ import ArchiveForm from '../components/ArchiveForm.html'; banner.set(viewer); } - update_viewer(JSON.parse(document.querySelector('script[data-viewer]').textContent)) + let viewer_from_dom = JSON.parse(document.querySelector('script[data-viewer]').textContent) + + update_viewer(viewer_from_dom) function set_viewer_timeout(){ setTimeout(() => fetch_viewer().then(update_viewer).then(set_viewer_timeout, set_viewer_timeout), @@ -202,4 +207,31 @@ import ArchiveForm from '../components/ArchiveForm.html'; }, }) } + + function bump_instance(instance_name){ + let known_instances = known_load(); + let found = false; + for(let instance of known_instances){ + if(instance['instance'] == instance_name){ + instance.hits ++; + found = true; + break; + } + } + if(!found){ + let instance = {"instance": instance_name, "hits": 1}; + known_instances.push(instance); + } + + known_save(known_instances); + + } + + if(viewer_from_dom['service'] == 'mastodon' && location.hash == '#bump_instance'){ + console.log('bumpin') + bump_instance(viewer_from_dom['id'].split('@')[1]) + let url = new URL(location.href) + url.hash = ''; + history.replaceState('', '', url); + } })(); diff --git a/dodo.py b/dodo.py index 7aa734f..75ceb08 100644 --- a/dodo.py +++ b/dodo.py @@ -120,6 +120,7 @@ def task_rollup(): for filename in filenames: src = 'assets/{}'.format(filename) dst = 'static/{}'.format(filename) + name = filename.split('.')[0] yield dict( name=filename, file_dep=list(chain( @@ -130,7 +131,7 @@ def task_rollup(): clean=True, actions=[ ['node_modules/.bin/rollup', '-c', - '-i', src, '-o', dst, '-f', 'iife'], + '-i', src, '-o', dst, '-n', name, '-f', 'iife'], ], ) diff --git a/routes/__init__.py b/routes/__init__.py index 0304bc6..6323712 100644 --- a/routes/__init__.py +++ b/routes/__init__.py @@ -265,7 +265,7 @@ def mastodon_login_step2(instance_url): g.viewer = session - resp = redirect(url_for('index')) + resp = redirect(url_for('index', _anchor='bump_instance')) return resp diff --git a/templates/about.html b/templates/about.html index 3766b43..eeab2db 100644 --- a/templates/about.html +++ b/templates/about.html @@ -74,7 +74,7 @@