← back to Linkedin Like Helper
Feed-pages: visible per-stream checklist (label + opened pill + re-open), matching Post-links UX
e35fcb1125947e10a5b325a872183794ae70f967 · 2026-07-01 10:44:12 -0700 · Steve Abrams
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Files touched
Diff
commit e35fcb1125947e10a5b325a872183794ae70f967
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Jul 1 10:44:12 2026 -0700
Feed-pages: visible per-stream checklist (label + opened pill + re-open), matching Post-links UX
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---
index.html | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
diff --git a/index.html b/index.html
index d4139ad..b608489 100644
--- a/index.html
+++ b/index.html
@@ -95,7 +95,7 @@
</div>
<label style="margin-top:14px">Add your own — hashtags (<code>#raffia</code>) or full URLs, one per line</label>
- <textarea id="customFeeds" placeholder="#grasscloth #luxuryinteriors https://www.linkedin.com/in/some-connection/recent-activity/all/" oninput="persistFeeds()"></textarea>
+ <textarea id="customFeeds" placeholder="#grasscloth #luxuryinteriors https://www.linkedin.com/in/some-connection/recent-activity/all/" oninput="persistFeeds();renderFeedStats()"></textarea>
</div>
<div class="card">
@@ -129,6 +129,7 @@
<span>Left: <b id="fLeft">0</b></span>
</div>
<div class="bar"><i id="fBar"></i></div>
+ <ul class="list" id="fList"></ul>
<div class="note">
<b>First time:</b> Chrome asks to <i>“allow multiple pop-ups”</i> — click Allow once.
@@ -278,6 +279,14 @@ function selectAll(on){
document.querySelectorAll('#sources input[type=checkbox]').forEach(c=>c.checked=on);
persistFeeds(); renderFeedStats();
}
+function feedLabel(url){
+ const p = PRESETS.find(p=>p.url===url);
+ if(p) return p.label;
+ const m = url.match(/[?&]keywords=([^&]+)/);
+ if(m) return '#'+decodeURIComponent(m[1]);
+ return url;
+}
+function reopenFeed(url){ openTabs([url]); fOpened.add(url); saveFeedOpened(); renderFeedStats(); }
function renderFeedStats(){
const sel = selectedFeeds();
const opened = sel.filter(u=>fOpened.has(u)).length;
@@ -285,6 +294,17 @@ function renderFeedStats(){
document.getElementById('fDone').textContent = opened;
document.getElementById('fLeft').textContent = sel.length-opened;
document.getElementById('fBar').style.width = sel.length? (opened/sel.length*100)+'%' : '0';
+ const ul=document.getElementById('fList'); ul.innerHTML='';
+ sel.forEach((u,i)=>{
+ const done=fOpened.has(u);
+ const li=document.createElement('li'); if(done) li.className='done';
+ li.innerHTML='<span class="num">'+(i+1)+'</span>'+
+ '<span class="url"><a href="'+u+'" target="_blank" rel="noopener">'+feedLabel(u)+'</a></span>'+
+ (done?'<span class="pill">opened</span>':'')+
+ '<button class="mini" data-u="'+encodeURIComponent(u)+'">re-open</button>';
+ ul.appendChild(li);
+ });
+ ul.querySelectorAll('.mini').forEach(b=>b.onclick=()=>reopenFeed(decodeURIComponent(b.dataset.u)));
}
function openNextFeeds(){
const sel = selectedFeeds();
← bfbe282 a11y: mode tabs are real buttons (keyboard focus + role=tab/
·
back to Linkedin Like Helper
·
chore: lint + refactor (feedLabel param shadow fix; tab a11y 1b0e80d →