-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbookmarklet.txt
More file actions
1 lines (1 loc) · 11.3 KB
/
Copy pathbookmarklet.txt
File metadata and controls
1 lines (1 loc) · 11.3 KB
1
javascript:(function()%7B%20function%20siteName()%7B%20var%20p%3Dlocation.hostname.replace(%2F%5Ewww%5C.%2F%2C%22%22).split(%22.%22)%3B%20var%20skip%3D%7Bchat%3A1%2Capp%3A1%2Cbeta%3A1%2Capi%3A1%2Cwww%3A1%2Cweb%3A1%2Cconsole%3A1%2Cplatform%3A1%7D%3B%20while(p.length%3E1%26%26skip%5Bp%5B0%5D%5D)p.shift()%3B%20return%20p%5B0%5D%7C%7C%22chat%22%3B%20%7D%20function%20siteKey()%7B%20var%20h%3Dlocation.hostname%3B%20if(h.includes(%22openai%22)%7C%7Ch.includes(%22chatgpt%22))return%20%22chatgpt%22%3B%20if(h.includes(%22claude%22)%7C%7Ch.includes(%22anthropic%22))return%20%22claude%22%3B%20if(h.includes(%22gemini%22)%7C%7Ch.includes(%22bard%22))return%20%22gemini%22%3B%20if(h.includes(%22perplexity%22))return%20%22perplexity%22%3B%20if(h.includes(%22deepseek%22))return%20%22deepseek%22%3B%20if(h.includes(%22arena%22))return%20%22arena%22%3B%20return%20%22generic%22%3B%20%7D%20function%20roleOf(el)%7B%20var%20s%3D((el.getAttribute(%22data-message-author-role%22)%7C%7C%22%22)%2B%22%20%22%2B(el.getAttribute(%22data-testid%22)%7C%7C%22%22)%2B%22%20%22%2B(el.getAttribute(%22data-role%22)%7C%7C%22%22)%2B%22%20%22%2B(el.getAttribute(%22aria-label%22)%7C%7C%22%22)%2B%22%20%22%2B(el.className%7C%7C%22%22)).toLowerCase()%3B%20if(%2F%5Cbuser%5Cb%7C%5Cbhuman%5Cb%7Cuser-message%7Chuman-message%2F.test(s))return%20%22user%22%3B%20if(%2Fassistant%7C%5Cbmodel%5Cb%7Cresponse%7C%5Cbbot%5Cb%7Cmessage-bubble--ai%2F.test(s))return%20%22assistant%22%3B%20return%20null%3B%20%7D%20function%20specific(key)%7B%20var%20out%3D%5B%5D%3B%20if(key%3D%3D%3D%22chatgpt%22)%7B%20document.querySelectorAll('%5Bdata-message-author-role%5D').forEach(function(el)%7B%20out.push(%7Brole%3Ael.getAttribute(%22data-message-author-role%22)%2Cnode%3Ael%7D)%3B%20%7D)%3B%20%7D%20else%20if(key%3D%3D%3D%22claude%22)%7B%20document.querySelectorAll('%5Bdata-testid%3D%22user-message%22%5D%2C%20.font-claude-response%2C%20.font-claude-message').forEach(function(el)%7B%20var%20isUser%3Del.getAttribute(%22data-testid%22)%3D%3D%3D%22user-message%22%7C%7C!!el.closest('%5Bdata-testid%3D%22user-message%22%5D')%3B%20out.push(%7Brole%3AisUser%3F%22user%22%3A%22assistant%22%2Cnode%3Ael%7D)%3B%20%7D)%3B%20%7D%20else%20if(key%3D%3D%3D%22gemini%22)%7B%20document.querySelectorAll(%22user-query%2C%20model-response%22).forEach(function(el)%7B%20out.push(%7Brole%3Ael.tagName.toLowerCase()%3D%3D%3D%22user-query%22%3F%22user%22%3A%22assistant%22%2Cnode%3Ael%7D)%3B%20%7D)%3B%20%7D%20else%20if(key%3D%3D%3D%22perplexity%22)%7B%20document.querySelectorAll('%5Bclass*%3D%22group%2Fquery%22%5D%2C%20.prose').forEach(function(el)%7B%20if(el.closest(%22textarea%22)%7C%7Cel.closest(%22form%22))return%3B%20var%20isUser%3D(el.getAttribute(%22class%22)%7C%7C%22%22).indexOf(%22group%2Fquery%22)%3E-1%3B%20out.push(%7Brole%3AisUser%3F%22user%22%3A%22assistant%22%2Cnode%3Ael%7D)%3B%20%7D)%3B%20%7D%20else%20if(key%3D%3D%3D%22deepseek%22)%7B%20document.querySelectorAll(%22.ds-message%22).forEach(function(m)%7B%20var%20md%3Dnull%3B%20m.querySelectorAll(%22.ds-markdown%22).forEach(function(x)%7Bif(!x.closest(%22.ds-think-content%22))md%3Dx%3B%7D)%3B%20if(md)%7Bout.push(%7Brole%3A%22assistant%22%2Cnode%3Amd%7D)%3B%7D%20else%7Bout.push(%7Brole%3A%22user%22%2Cnode%3Am%7D)%3B%7D%20%7D)%3B%20%7D%20else%20if(key%3D%3D%3D%22arena%22)%7B%20document.querySelectorAll(%22.prose%22).forEach(function(el)%7B%20if(el.closest(%22.font-mono%22))return%3B%20if(el.closest(%22.tiptap%22)%7C%7Cel.closest(%22.ProseMirror%22)%7C%7Cel.closest(%22form%22))return%3B%20var%20isUser%3D!!el.closest(%22.bg-surface-raised%22)%7C%7C!!el.closest(%22.items-end%22)%3B%20out.push(%7Brole%3AisUser%3F%22user%22%3A%22assistant%22%2Cnode%3Ael%7D)%3B%20%7D)%3B%20%7D%20return%20out%3B%20%7D%20function%20generic()%7B%20var%20sel%3D'%5Bdata-message-author-role%5D%2C%5Bdata-testid*%3D%22message%22%5D%2C%5Bdata-role%5D%2C%5Bclass*%3D%22message-bubble%22%5D%2C%5Bclass*%3D%22claude-response%22%5D%2C%5Bclass*%3D%22claude-message%22%5D%2C%5Bclass*%3D%22chat-turn%22%5D%2C%5Bclass*%3D%22conversation-turn%22%5D%2C%5Bclass*%3D%22-message%22%5D%2C%5Bclass*%3D%22message-%22%5D'%3B%20var%20raw%3D%5B%5D%3B%20document.querySelectorAll(sel).forEach(function(n)%7Braw.push(n)%3B%7D)%3B%20var%20nodes%3Draw.filter(function(n)%7B%20var%20t%3D(n.innerText%7C%7C%22%22).trim()%3B%20if(t.length%3C1)return%20false%3B%20for(var%20i%3D0%3Bi%3Craw.length%3Bi%2B%2B)%7Bif(raw%5Bi%5D!%3D%3Dn%26%26n.contains%26%26n.contains(raw%5Bi%5D))return%20false%3B%7D%20return%20true%3B%20%7D)%3B%20var%20out%3D%5B%5D%2Cexpect%3D%22user%22%3B%20nodes.forEach(function(n)%7B%20var%20r%3DroleOf(n)%7C%7Cexpect%3B%20expect%3D(r%3D%3D%3D%22user%22)%3F%22assistant%22%3A%22user%22%3B%20out.push(%7Brole%3Ar%2Cnode%3An%7D)%3B%20%7D)%3B%20return%20out%3B%20%7D%20function%20getBlocks(key)%7B%20var%20b%3Dspecific(key)%3B%20if(b.filter(function(x)%7Breturn%20(x.node.innerText%7C%7Cx.node.textContent%7C%7C%22%22).trim()%3B%7D).length%3C2)%7B%20b%3Dgeneric()%3B%20%7D%20return%20b%3B%20%7D%20var%20LABELS%3D%5B%2F%5Evous%20avez%20dit%5Cs*%3A%3F%5C.%3F%24%2Fi%2C%2F%5Eyou%20said%5Cs*%3A%3F%5C.%3F%24%2Fi%2C%2F%5E(gemini%7Cchatgpt%7Cclaude%7Cgrok%7Cqwen%7Cmistral%7Cle%20chat%7Ccopilot%7Cdeepseek)%20(a%20dit%7Csaid)%5Cs*%3A%3F%5C.%3F%24%2Fi%5D%3B%20function%20clean(node)%7B%20var%20c%3Dnode.cloneNode(true)%3B%20if(c.querySelectorAll)c.querySelectorAll(%22button%22).forEach(function(b)%7Bb.remove()%3B%7D)%3B%20var%20t%3Dc.innerText%7C%7Cc.textContent%7C%7C%22%22%3B%20t%3Dt.replace(%2F%5Cu00a0%2Fg%2C%22%20%22)%3B%20var%20lines%3Dt.split(%22%5Cn%22).filter(function(line)%7B%20var%20L%3Dline.trim()%3B%20for(var%20i%3D0%3Bi%3CLABELS.length%3Bi%2B%2B)%7Bif(LABELS%5Bi%5D.test(L))return%20false%3B%7D%20return%20true%3B%20%7D)%3B%20return%20lines.join(%22%5Cn%22).replace(%2F%5Cn%7B3%2C%7D%2Fg%2C%22%5Cn%5Cn%22).trim()%3B%20%7D%20function%20captureKeyed(key)%7B%20var%20out%3D%5B%5D%3B%20getBlocks(key).forEach(function(b)%7B%20var%20content%3Dclean(b.node)%3B%20if(!content)return%3B%20out.push(%7Brole%3Ab.role%2Ccontent%3Acontent%2Ck%3Ab.role%2B%22%5Cu0001%22%2Bcontent%7D)%3B%20%7D)%3B%20return%20out%3B%20%7D%20function%20merge(acc%2Ccur)%7B%20if(acc.length%3D%3D%3D0)return%20cur.slice()%3B%20if(cur.length%3D%3D%3D0)return%20acc%3B%20var%20maxK%3DMath.min(acc.length%2Ccur.length)%3B%20for(var%20k%3DmaxK%3Bk%3E%3D1%3Bk--)%7B%20var%20ok%3Dtrue%3B%20for(var%20i%3D0%3Bi%3Ck%3Bi%2B%2B)%7B%20if(acc%5Bacc.length-k%2Bi%5D.k!%3D%3Dcur%5Bi%5D.k)%7Bok%3Dfalse%3Bbreak%3B%7D%20%7D%20if(ok)return%20acc.concat(cur.slice(k))%3B%20%7D%20return%20acc.concat(cur)%3B%20%7D%20function%20slug(s)%7B%20return%20(s%7C%7C%22%22).toLowerCase().normalize(%22NFD%22).replace(%2F%5B%5Cu0300-%5Cu036f%5D%2Fg%2C%22%22).replace(%2F%5B%5Ea-z0-9%5D%2B%2Fg%2C%22-%22).replace(%2F%5E-%2B%7C-%2B%24%2Fg%2C%22%22).slice(0%2C40)%7C%7C%22discussion%22%3B%20%7D%20function%20getScroller(sample)%7B%20var%20n%3Dsample%3B%20while(n%26%26n!%3D%3Ddocument.body%26%26n!%3D%3Ddocument.documentElement)%7B%20try%7B%20var%20st%3DgetComputedStyle(n)%3B%20if(%2F(auto%7Cscroll)%2F.test(st.overflowY)%26%26n.scrollHeight%3En.clientHeight%2B40)return%20n%3B%20%7Dcatch(e)%7B%7D%20n%3Dn.parentElement%3B%20%7D%20return%20document.scrollingElement%7C%7Cdocument.documentElement%3B%20%7D%20function%20sleep(ms)%7Breturn%20new%20Promise(function(r)%7BsetTimeout(r%2Cms)%3B%7D)%3B%7D%20function%20statusBox()%7B%20var%20d%3Ddocument.createElement(%22div%22)%3B%20d.style.cssText%3D%22position%3Afixed%3Bz-index%3A2147483647%3Bright%3A16px%3Bbottom%3A16px%3Bbackground%3A%234f46e5%3Bcolor%3A%23fff%3Bfont%3A600%2013px%20system-ui%2Csans-serif%3Bpadding%3A10px%2014px%3Bborder-radius%3A10px%3Bbox-shadow%3A0%206px%2020px%20rgba(0%2C0%2C0%2C.3)%3Bmax-width%3A280px%22%3B%20document.body.appendChild(d)%3B%20return%20d%3B%20%7D%20(async%20function()%7B%20var%20key%3DsiteKey()%3B%20var%20box%3DstatusBox()%3B%20box.textContent%3D%22%E2%8F%B3%20Pr%C3%A9paration...%22%3B%20var%20first%3DcaptureKeyed(key)%3B%20if(first.length%3D%3D%3D0)%7Bbox.textContent%3D%22%E2%9D%8C%20Aucun%20message%20d%C3%A9tect%C3%A9%20sur%20cette%20page.%22%3Bawait%20sleep(2500)%3Bbox.remove()%3Breturn%3B%7D%20var%20scroller%3DgetScroller(getBlocks(key)%5B0%5D%26%26getBlocks(key)%5B0%5D.node%7C%7Cdocument.body)%3B%20var%20prevScroll%3Dscroller.scrollTop%3B%20box.textContent%3D%22%E2%8F%B3%20Remont%C3%A9e%20en%20haut...%22%3B%20for(var%20i%3D0%3Bi%3C40%3Bi%2B%2B)%7B%20scroller.scrollTop%3D0%3B%20await%20sleep(120)%3B%20if(scroller.scrollTop%3D%3D%3D0)break%3B%20%7D%20await%20sleep(300)%3B%20var%20acc%3D%5B%5D%3B%20var%20step%3DMath.max(250%2C(scroller.clientHeight%7C%7C600)*0.7)%3B%20var%20prevTop%3D-1%2Csame%3D0%2Cstart%3DDate.now()%3B%20while(true)%7B%20acc%3Dmerge(acc%2CcaptureKeyed(key))%3B%20box.textContent%3D%22%E2%8F%B3%20Lecture...%20%22%2Bacc.length%2B%22%20messages%22%3B%20var%20atBottom%3Dscroller.scrollTop%2Bscroller.clientHeight%3E%3Dscroller.scrollHeight-5%3B%20if(atBottom)%7B%20await%20sleep(300)%3B%20acc%3Dmerge(acc%2CcaptureKeyed(key))%3B%20break%3B%20%7D%20scroller.scrollTop%3Dscroller.scrollTop%2Bstep%3B%20await%20sleep(300)%3B%20if(scroller.scrollTop%3D%3D%3DprevTop)%7B%20same%2B%2B%3B%20if(same%3E%3D3)break%3B%20%7D%20else%20same%3D0%3B%20prevTop%3Dscroller.scrollTop%3B%20if(Date.now()-start%3E90000)break%3B%20%7D%20try%7Bscroller.scrollTop%3DprevScroll%3B%7Dcatch(e)%7B%7D%20var%20cleaned%3D%5B%5D%3B%20acc.forEach(function(b)%7B%20var%20last%3Dcleaned%5Bcleaned.length-1%5D%3B%20if(last%26%26last.role%3D%3D%3Db.role%26%26last.content%3D%3D%3Db.content)return%3B%20cleaned.push(%7Brole%3Ab.role%2Ccontent%3Ab.content%7D)%3B%20%7D)%3B%20if(cleaned.length%3D%3D%3D0)%7Bbox.textContent%3D%22%E2%9D%8C%20Discussion%20vide.%22%3Bawait%20sleep(2500)%3Bbox.remove()%3Breturn%3B%7D%20var%20name%3DsiteName()%3B%20var%20txt%3D%22Discussion%20extraite%20de%20%3A%20%22%2Blocation.href%2B%22%5Cn%22%2B%22Site%20%3A%20%22%2Bname%2B%22%5Cn%22%2B%22Date%20d'extraction%20%3A%20%22%2Bnew%20Date().toLocaleString()%2B%22%5Cn%22%2B%22Nombre%20de%20messages%20%3A%20%22%2Bcleaned.length%2B%22%5Cn%22%2B%22%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%5Cn%5Cn%22%3B%20cleaned.forEach(function(b)%7B%20var%20label%3Db.role%3D%3D%3D%22user%22%3F%22MOI%22%3A%22ASSISTANT%22%3B%20txt%2B%3D%22%3D%3D%3D%3D%3D%20%22%2Blabel%2B%22%20%3D%3D%3D%3D%3D%5Cn%22%2Bb.content%2B%22%5Cn%5Cn%22%3B%20%7D)%3B%20var%20subject%3D%22%22%3B%20if(key!%3D%3D%22arena%22)%7B%20subject%3D(document.title%7C%7C%22%22).replace(%2F%5Cs*%5B-%7C%5Cu2013%5D%5Cs*(ChatGPT%7CClaude%7CGemini%7CGrok%7CQwen%7CMistral%7CLe%20Chat%7CPerplexity%7CCopilot%7CDeepSeek%7CArena).*%24%2Fi%2C%22%22).trim()%3B%20%7D%20if(!subject%7C%7Csubject.length%3C3)%7B%20var%20fu%3Dcleaned.find(function(b)%7Breturn%20b.role%3D%3D%3D%22user%22%3B%7D)%3B%20subject%3Dfu%3Ffu.content%3Acleaned%5B0%5D.content%3B%20%7D%20var%20blob%3Dnew%20Blob(%5Btxt%5D%2C%7Btype%3A%22text%2Fplain%3Bcharset%3Dutf-8%22%7D)%3B%20var%20url%3DURL.createObjectURL(blob)%3B%20var%20a%3Ddocument.createElement(%22a%22)%3B%20a.href%3Durl%3Ba.download%3Dname%2B%22_%22%2Bslug(subject)%2B%22.txt%22%3B%20document.body.appendChild(a)%3Ba.click()%3Ba.remove()%3BURL.revokeObjectURL(url)%3B%20box.textContent%3D%22%E2%9C%85%20%22%2Bcleaned.length%2B%22%20messages%20export%C3%A9s%20!%22%3B%20console.log(%22OK%20%3A%20%22%2Bcleaned.length%2B%22%20messages%20exportes%20-%3E%20%22%2Ba.download)%3B%20await%20sleep(2500)%3Bbox.remove()%3B%20%7D)()%3B%20%7D)()%3B