Skip to content
Snippets Groups Projects
Verified Commit 18dda0cc authored by MickGe's avatar MickGe :tiger2:
Browse files

build

parent 386cc3a5
Branches dev
No related tags found
No related merge requests found
:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;background-color:#000;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%}a{font-weight:500;color:#9ec5e8;text-decoration:inherit}a:hover{color:#5ea0da}body{margin:0;min-height:100vh}h1{font-size:3.2em;line-height:1.1}#app{max-width:920px;margin:0 auto;padding:2rem;text-align:center}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}.toot{padding:1em;margin:2em auto;border:solid #827d7d 1px;border-radius:8px;background:#242424;overflow:hidden;text-overflow:ellipsis;max-height:1000vh;transition:opacity 1s .2s ease-in-out,max-height 1.5s .1s ease-out,padding 1s .8s ease-in-out,margin 1s .8s ease-in-out}.toot .banner{display:flex;align-items:center;flex-direction:row;justify-content:space-between}.toot .banner button.unbookmark{background-color:#6c0a0a;border:solid #827d7d 1px;transition:all .2s .1s ease-out}.toot .banner button.unbookmark:hover{transform:translate(2px,-2px);box-shadow:#000 -3px 3px 3px,#fff -3px 3px 4px 1px}.toot-content{text-align:start}.toot .attachments{display:flex;overflow:scroll;align-items:center;column-gap:1em}.toot .attachments img{max-width:380px;max-height:380px;margin:auto;border-radius:4px}.toot .account{display:flex;flex-direction:row;justify-content:start;align-items:center}.toot .account-avatar{width:46px;height:46px;border-radius:4px;overflow:hidden;margin-right:1em}.toot .account-avatar img{width:100%;height:100;object-fit:cover}.toot.disappeared{opacity:0;max-height:0;padding:0 1em;margin:0 auto}.date-modified{font-size:small;font-style:italic;text-align:end}
(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const t of document.querySelectorAll('link[rel="modulepreload"]'))n(t);new MutationObserver(t=>{for(const r of t)if(r.type==="childList")for(const s of r.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&n(s)}).observe(document,{childList:!0,subtree:!0});function c(t){const r={};return t.integrity&&(r.integrity=t.integrity),t.referrerPolicy&&(r.referrerPolicy=t.referrerPolicy),t.crossOrigin==="use-credentials"?r.credentials="include":t.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function n(t){if(t.ep)return;t.ep=!0;const r=c(t);fetch(t.href,r)}})();const m=document.createElement("div");m.classList.add("news-feed-el");const v=async(e,o)=>await fetch(e,{mode:"cors",headers:{Authorization:`Bearer ${o}`}}).then(n=>n.json().then(t=>{const r=n.headers.get("link").split(",").map(s=>s.match(/&m(ax|in)_id=\d+/g));return[t,...r]}),n=>{console.error(n)}),L=async(e,o,c,n)=>{const t=`${e}api/v1/statuses/${c}/unbookmark`;try{await fetch(t,{mode:"cors",method:"POST",headers:{Authorization:`Bearer ${o}`}}).then(r=>{console.info(r.url),n.classList.add("disappeared");const s=document.querySelector("#bm_nb").textContent-=1;document.title=`${s} Mastodon unBookmarks`},r=>{console.error(r)})}catch(r){console.error(r)}},w=e=>e.charAt(0).toUpperCase()+e.slice(1),$=async(e,o)=>await v(e,o),E=(e,o)=>`<div id="${e.id}" class="toot">
<div class="banner">
<a href="${e.account.url}" target="_blank" title="Voir le profil sur l'instance d'origine"><div class="account"><div class="account-avatar"><img src="${e.account.avatar}" /></div><div class="account.username">${e.account.display_name}</div></div></a>
<button title="Cliquer pour retirer le marque-page" class="unbookmark">&#128278;</button>
</div>
<div class="toot-content">${e.content}</div>
${o.length?o.join(""):""}
<div class="date-modified">
<a href="${e.uri}" target="_blank" title="Voir le pouet sur Mastodon">${w(e.created_at)} <i class="fa fa-up-right-from-square" aria-hidden="true"></i></a>
</div>
</div>`,_=async(e,o)=>{const c=`${e}api/v1/bookmarks/?limit=40`;try{const n=[];let t,r="";do{const a=await $(c+t,o);n.push(...a[0]),[t,r]=[a[1],a[2]]}while(r);n.reverse();const s={weekday:"long",year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"numeric",timeZone:"Europe/Paris"};n.forEach(a=>{a.created_at=new Date(a.created_at).toLocaleString("fr-FR",s),a.account.display_name=a.account.display_name.replaceAll(/:\w+:/g,"").trim()||a.account.username;const d=new RegExp('(?<=rel="tag")',"g");a.content=a.content.replaceAll(d,' target="_blank"');const i=a.media_attachments.filter(u=>u.type=="image").map(u=>`<img src="${u.preview_url}" title="${u.description}"/>`);i.length&&i.unshift('<div class="attachments">')&&i.push("</div>"),m.innerHTML+=E(a,i)}),m.querySelectorAll(".unbookmark").forEach(a=>{const d=a.parentElement.parentElement,i=d.id;a.addEventListener("click",()=>L(e,o,i,d))});const y=n.length;return{newsFeedEl:m,bookmarksNb:y}}catch(n){console.error(n)}return"Nothing to display…"},f=document.createElement("div");f.classList.add("actionbar");const h=document.createElement("button");f.appendChild(h);h.innerHTML="&#x21C5;";h.title="Cliquer pour inverser l'ordre";const q=()=>{document.querySelector(".news-feed-el").classList.toggle("reverse")};h.addEventListener("click",q);var k;const l=Object.fromEntries((k=document.cookie)==null?void 0:k.split(";").map(e=>e.trim().split("="))),g=prompt("Token? (read:bookmarks & write:bookmarks)",l==null?void 0:l.token);let p=prompt("URL instance?",l==null?void 0:l.instanceURL);p.startsWith("https://")||(p="https://".concat(p));const b=new URL(p);document.cookie=`token=${g}; max-age=604800; samesite=lax; secure`;document.cookie=`instanceURL=${b}; max-age=604800; samesite=lax; secure`;const x=async()=>{const e=await _(b,g);document.querySelector("#app").appendChild(f),document.querySelector("#app").appendChild((e==null?void 0:e.newsFeedEl)||e),document.querySelector("#bm_nb").textContent=(e==null?void 0:e.bookmarksNb)||"Ø",e!=null&&e.bookmarksNb&&(document.title=`${e.bookmarksNb} Mastodon unBookmarks`)};x();
:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:dark;color:#ffffffde;background-color:#000;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%}*{box-sizing:border-box}a{font-weight:500;color:#9ec5e8;text-decoration:inherit}a:hover{color:#5ea0da}body{margin:0;min-height:100vh}h1{font-size:2em;line-height:1.1;margin:2rem auto;padding-bottom:1rem;text-align:center;position:sticky;top:0;background-color:#000;box-shadow:#000 0 20px 20px}h1 em{opacity:50%}#bm_nb{margin-right:1rem;font-size:95%}#app,.presentation{max-width:920px;margin:0 auto;text-align:center;padding:2rem}.presentation{padding:0 2rem;text-align:start}.presentation .logo{max-width:1em}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}.news-feed-el{display:flex;flex-direction:column;position:relative}.news-feed-el.reverse{flex-direction:column-reverse}.toot{width:100%;padding:1em;margin:1.2em auto;border:solid #827d7d 1px;border-radius:8px;background:#242424;position:relative;z-index:20;overflow:hidden;text-overflow:ellipsis;max-height:1000vh;transition:opacity 1s .2s ease-in-out,max-height 1.5s .1s ease-out,padding 1s .8s ease-in-out,margin 1s .8s ease-in-out}.toot .banner{display:flex;align-items:center;flex-direction:row;justify-content:space-between}.toot .banner button.unbookmark{background-color:#6c0a0a;border:solid #827d7d 1px;transition:all .2s .1s ease-out}.toot .banner button.unbookmark:hover{transform:translate(2px,-2px);box-shadow:#000 -3px 3px 3px,#fff -3px 3px 4px 1px}.toot-content{text-align:start}.toot .attachments{display:flex;overflow:scroll;align-items:center;column-gap:1em}.toot .attachments img{max-width:380px;max-height:380px;margin:auto;border-radius:4px}.toot .account{display:flex;flex-direction:row;justify-content:start;align-items:center}.toot .account-avatar{width:46px;height:46px;border-radius:4px;overflow:hidden;margin-right:1em}.toot .account-avatar img{width:100%;height:100;object-fit:cover}.toot.disappeared{opacity:0;max-height:0;padding:0 1em;margin:0 auto}.date-modified{font-size:small;font-style:italic;text-align:end}
(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const t of document.querySelectorAll('link[rel="modulepreload"]'))a(t);new MutationObserver(t=>{for(const r of t)if(r.type==="childList")for(const c of r.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&a(c)}).observe(document,{childList:!0,subtree:!0});function o(t){const r={};return t.integrity&&(r.integrity=t.integrity),t.referrerPolicy&&(r.referrerPolicy=t.referrerPolicy),t.crossOrigin==="use-credentials"?r.credentials="include":t.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function a(t){if(t.ep)return;t.ep=!0;const r=o(t);fetch(t.href,r)}})();const m=document.createElement("div");m.classList.add("news-feed-el");const y=async(e,s)=>await fetch(e,{mode:"cors",headers:{Authorization:`Bearer ${s}`}}).then(a=>a.json().then(t=>(a.headers.get("link").split(",").map(r=>r.split(";")[0].replaceAll(/<|>/g,"").trim()),[t,...a.headers.get("link").split(",").map(r=>r.match(/&m(ax|in)_id=\d+/g))])),a=>{console.error(a)}),v=async(e,s,o,a)=>{const t=`${e}api/v1/statuses/${o}/unbookmark`;try{const r=await fetch(t,{mode:"cors",method:"POST",headers:{Authorization:`Bearer ${s}`}}).then(c=>{console.info(c.url),a.classList.add("disappeared")},c=>{console.error(c)})}catch(r){console.error(r)}},k=e=>e.charAt(0).toUpperCase()+e.slice(1),b=async(e,s)=>await y(e,s),L=(e,s)=>`<div id="${e.id}" class="toot">
<div class="banner">
<a href="${e.account.url}" target="_blank" title="Voir le profil sur l'instance d'origine"><div class="account"><div class="account-avatar"><img src="${e.account.avatar}" /></div><div class="account.username">${e.account.display_name}</div></div></a>
<button title="Cliquer pour retirer le marque-page" class="unbookmark">&#128278;</button>
</div>
<div class="toot-content">${e.content}</div>
${s.length?s.join(""):""}
<div class="date-modified">
<a href="${e.uri}" target="_blank" title="Voir le pouet sur Mastodon">${k(e.created_at)} <i class="fa fa-up-right-from-square" aria-hidden="true"></i></a>
</div>
</div>`,w=async(e,s)=>{const o=`${e}api/v1/bookmarks/?limit=40`;try{const a=[];let t,r="";do{const n=await b(o+t,s);a.push(...n[0]),[t,r]=[n[1],n[2]]}while(r);a.reverse();const c={weekday:"long",year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"numeric",timeZone:"Europe/Paris"};return a.forEach(n=>{n.created_at=new Date(n.created_at).toLocaleString("fr-FR",c),n.account.display_name=n.account.display_name.replaceAll(/:\w+:/g,"").trim()||n.account.username;const d=new RegExp('(?<=rel="tag")',"g");n.content=n.content.replaceAll(d,' target="_blank"');const i=n.media_attachments.filter(u=>u.type=="image").map(u=>`<img src="${u.preview_url}" title="${u.description}"/>`);i.length&&i.unshift('<div class="attachments">')&&i.push("</div>"),m.innerHTML+=L(n,i)}),m.querySelectorAll(".unbookmark").forEach(n=>{const d=n.parentElement.parentElement,i=d.id;n.addEventListener("click",()=>v(e,s,i,d))}),m}catch(a){console.error(a)}return"Nothing to display…"};var h;const l=Object.fromEntries((h=document.cookie)==null?void 0:h.split(";").map(e=>e.trim().split("="))),f=prompt("Token? (read:bookmarks & write:bookmarks)",l==null?void 0:l.token);let p=prompt("URL instance?",l==null?void 0:l.instanceURL);p.startsWith("https://")||(p="https://".concat(p));const g=new URL(p);document.cookie=`token=${f}; max-age=604800; samesite=lax; secure`;document.cookie=`instanceURL=${g}; max-age=604800; samesite=lax; secure`;const $=async()=>{const e=await w(g,f);document.querySelector("#app").appendChild(e)};$();
......@@ -4,11 +4,18 @@
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/Mastodon_Logotype_(Simple).svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite App</title>
<script type="module" crossorigin src="/assets/index-e66dba42.js"></script>
<link rel="stylesheet" href="/assets/index-50dec3ea.css">
<title>Mastodon unBookmarks</title>
<script type="module" crossorigin src="/assets/index-84fa1614.js"></script>
<link rel="stylesheet" href="/assets/index-bdd0e28c.css">
</head>
<body>
<h1><span id="bm_nb"></span>Mastodon <em>un</em>Bookmarks</h1>
<div class="presentation">
<p>Tout se passe dans le navigateur.</p>
<p>Depuis son compte <em>Mastodon</em>, il faut générer un jeton d'accès ayant pour droit <code>read:bookmarks</code> et <code>write:bookmarks</code>.</p>
<p>Un cookie permet de stocker le jeton et l'adresse de l'intance pendant 7 jours, il faut donc supprimer le cookie ou utiliser la navigation privée pour ne pas qu'il demeure.</p>
<p><img class="logo" src="https://about.gitlab.com/nuxt-images/ico/favicon-32x32.png" alt="Logo de GitLab"/> Le code source est là : <a href="https://forge.tedomum.net/mickge/mastodon-bookmarks" target="_blank">https://forge.tedomum.net/mickge/mastodon-bookmarks</a>.</p>
</div>
<div id="app"></div>
</body>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment