Thread viewer for Bluesky

Compare changes

Choose any two refs to compare.

+4
index.html
··· 201 201 202 202 <div class="lycan-import"> 203 203 <form> 204 + <h4>Data not imported yet</h4> 205 + 204 206 <p> 205 207 In order to search within your likes and bookmarks, the posts you've liked or saved need to be imported into a database. 206 208 This is a one-time process, but it can take several minutes or more, depending on the age of your account. ··· 215 217 </form> 216 218 217 219 <div class="import-progress"> 220 + <h4>Import in progress</h4> 221 + 218 222 <p class="import-status"></p> 219 223 <p><progress></progress> <output></output></p> 220 224 </div>
+5 -1
menu.js
··· 11 11 12 12 html.addEventListener('click', (e) => { 13 13 this.menuElement.style.visibility = 'hidden'; 14 + this.icon.classList.remove('active'); 14 15 }); 15 16 16 17 let homeLink = $(this.menuElement.querySelector('a[href="?"]'), HTMLLinkElement); ··· 69 70 } 70 71 71 72 toggleAccountMenu() { 72 - this.menuElement.style.visibility = (this.menuElement.style.visibility == 'visible') ? 'hidden' : 'visible'; 73 + let isVisible = (this.menuElement.style.visibility == 'visible'); 74 + 75 + this.menuElement.style.visibility = isVisible ? 'hidden' : 'visible'; 76 + this.icon.classList.toggle('active', !isVisible); 73 77 } 74 78 75 79 /** @param {string} buttonName */
+14 -6
private_search_page.js
··· 42 42 43 43 let params = new URLSearchParams(location.search); 44 44 this.mode = params.get('mode'); 45 - this.lycanMode = params.get('lycan'); 45 + let lycan = params.get('lycan'); 46 46 47 - if (this.lycanMode == 'local') { 47 + if (lycan == 'local') { 48 48 this.localLycan = new BlueskyAPI('http://localhost:3000', false); 49 + } else if (lycan) { 50 + this.lycanAddress = `did:web:${lycan}#lycan`; 51 + } else { 52 + this.lycanAddress = 'did:web:lycan.feeds.blue#lycan'; 49 53 } 50 54 } 51 55 ··· 136 140 return await this.localLycan.getRequest('blue.feeds.lycan.getImportStatus', { user: accountAPI.user.did }); 137 141 } else { 138 142 return await accountAPI.getRequest('blue.feeds.lycan.getImportStatus', null, { 139 - headers: { 'atproto-proxy': 'did:web:lycan.feeds.blue#lycan' } 143 + headers: { 'atproto-proxy': this.lycanAddress } 140 144 }); 141 145 } 142 146 } ··· 157 161 this.lycanImportSection.style.display = 'block'; 158 162 this.lycanImportForm.style.display = 'block'; 159 163 this.importProgress.style.display = 'none'; 164 + this.searchField.disabled = true; 160 165 161 166 this.stopImportTimer(); 162 167 } else if (info.status == 'in_progress' || info.status == 'scheduled' || info.status == 'requested') { 163 168 this.lycanImportSection.style.display = 'block'; 164 169 this.lycanImportForm.style.display = 'none'; 165 170 this.importProgress.style.display = 'block'; 171 + this.searchField.disabled = true; 166 172 167 173 this.showImportProgress(info); 168 174 this.startImportTimer(); 169 175 } else if (info.status == 'finished') { 170 176 this.lycanImportForm.style.display = 'none'; 171 177 this.importProgress.style.display = 'block'; 178 + this.searchField.disabled = false; 172 179 173 180 this.showImportProgress({ status: 'finished', progress: 1.0 }); 174 181 this.stopImportTimer(); ··· 192 199 this.importStatusLabel.innerText = `Import complete ✓`; 193 200 } else if (info.position) { 194 201 let date = new Date(info.position).toLocaleString(window.dateLocale, { day: 'numeric', month: 'short', year: 'numeric' }); 195 - this.importStatusLabel.innerText = `Imported data until: ${date}`; 202 + this.importStatusLabel.innerText = `Downloaded data until: ${date}`; 196 203 } else if (info.status == 'requested') { 197 204 this.importStatusLabel.innerText = 'Requesting import…'; 198 205 } else { ··· 206 213 this.lycanImportSection.style.display = 'block'; 207 214 this.lycanImportForm.style.display = 'none'; 208 215 this.importProgress.style.display = 'block'; 216 + this.searchField.disabled = true; 209 217 210 218 this.importStatusLabel.innerText = message; 211 219 this.stopImportTimer(); ··· 240 248 }); 241 249 } else { 242 250 await accountAPI.postRequest('blue.feeds.lycan.startImport', null, { 243 - headers: { 'atproto-proxy': 'did:web:lycan.feeds.blue#lycan' } 251 + headers: { 'atproto-proxy': this.lycanAddress } 244 252 }); 245 253 } 246 254 ··· 354 362 if (cursor) params.cursor = cursor; 355 363 356 364 response = await accountAPI.getRequest('blue.feeds.lycan.searchPosts', params, { 357 - headers: { 'atproto-proxy': 'did:web:lycan.feeds.blue#lycan' } 365 + headers: { 'atproto-proxy': this.lycanAddress } 358 366 }); 359 367 } 360 368
+4
style.css
··· 1158 1158 background-color: transparent; 1159 1159 } 1160 1160 1161 + #account.active { 1162 + color: #333; 1163 + } 1164 + 1161 1165 #account_menu { 1162 1166 background: hsl(210, 33.33%, 94.0%); 1163 1167 border-color: #ccc;