18 lines
14 KiB
JavaScript
18 lines
14 KiB
JavaScript
var j=(e,o="_")=>e.replace(/[\W]+/g,o);var C=e=>{if("clipboard"in navigator)return navigator.clipboard.writeText(e);if(document.queryCommandSupported&&document.queryCommandSupported("copy")){let o=document.createElement("textarea");o.textContent=e,o.style.position="fixed",document.body.appendChild(o),o.select();try{return document.execCommand("copy")}catch(r){return console.warn("Copy to clipboard failed.",r),!1}finally{document.body.removeChild(o)}}return!1};var B=(e,o)=>new Promise((r,l)=>{if(o&&globalThis[o])return r(globalThis[o]);if(typeof globalThis.importScripts=="function")return globalThis.importScripts(e),o&&globalThis[o]?r(globalThis[o]):r(globalThis);let c=document.createElement("script");c.src=e,c.async=!0;let i=()=>{c.removeEventListener("load",a),c.removeEventListener("error",m)},a=()=>{if(i(),!o)return r("loaded: "+e);let u=setInterval(()=>{if(window[o])return clearInterval(u),r(window[o])},5)},m=()=>{i(),l("failed to load: "+e)};c.addEventListener("load",a),c.addEventListener("error",m),document.head.appendChild(c)});var I={APP_VERSION:"46",SDK_VERSION:"0.11.1",COMMIT_SHA:"43f0982",REPO_URL:"https://github.com/live-codes/livecodes",DOCS_BASE_URL:"/docs/"};var A='<div id="share-screen" class="modal-container"><div class="modal-title" data-i18n="share.heading">Share</div><div class="modal-content modal-screen-container"><div id="share-top-text"><span id="share-permanent-url"><input id="share-permanent-url-checkbox" type="checkbox"><label for="share-permanent-url-checkbox" data-i18n="share.permanentURL">Permanent URL</label></span> <a href="#" id="share-click-to-copy"></a></div><input type="text" dir="ltr" id="share-url-input" data-clickonenter="true" readonly><div id="share-expiry" class="share-expiry light"><div class="share-short-url-expiry"><span> </span><a href="#" data-i18n="share.encodedURL">Get encoded URL</a></div><div class="share-encoded-url-expiry"><span class="{{warnClass}}" data-i18n="share.characters">{{urlLength}} characters</span><a href="#" data-i18n="share.shortURL">Get short URL</a></div></div><div id="share-expiry-self-hosted" class="share-expiry light"><div class="share-short-url-expiry"><span class="danger" data-i18n="share.expireInOneYear">Expires in 1 year</span><a href="#" data-i18n="share.encodedURL">Get encoded URL</a></div><div class="share-encoded-url-expiry"><span class="{{warnClass}}" data-i18n="share.characters">{{urlLength}} characters</span><a href="#" data-i18n="share.shortURL">Get short URL</a></div></div><div id="share-links-container"><ul id="share-links"></ul><div id="qrcode-container" class="qrcode-container" data-i18n="share.qrcode.generating">Generating...</div></div></div></div>';var K=e=>Object.entries(I).reduce((o,[r,l])=>o.replace(new RegExp(`{{${r}}}`,"g"),l),e);var R=K(A);var $=(e=location.origin)=>!!(e&&(e.endsWith("livecodes.io")||e.endsWith("ethanmartin.site")||e.endsWith("livecodes.pages.dev")||e.endsWith("localpen.pages.dev")||e.startsWith("http://127.0.0.1")||e.startsWith("http://localhost")));var P=["esm.sh","skypack","esm.run","jsdelivr.esm","fastly.jsdelivr.esm","gcore.jsdelivr.esm","testingcf.jsdelivr.esm","jsdelivr.b-cdn.esm","jspm"],N=["jsdelivr","fastly.jsdelivr","unpkg","gcore.jsdelivr","testingcf.jsdelivr","jsdelivr.b-cdn","npmcdn"],W=["jsdelivr.gh","fastly.jsdelivr.gh","statically","gcore.jsdelivr.gh","testingcf.jsdelivr.gh","jsdelivr.b-cdn.gh"],y={getModuleUrl:(e,{isModule:o=!0,defaultCDN:r="esm.sh",external:l}={})=>{e=e.replace(/#nobundle/g,"");let c=a=>!l||!a.includes("https://esm.sh")?a:a.includes("?")?`${a}&external=${l}`:`${a}?external=${l}`,i=D(e,o,r);return i?c(i):o?c("https://esm.sh/"+e):"https://cdn.jsdelivr.net/npm/"+e},getUrl:(e,o)=>e.startsWith("http")||e.startsWith("data:")?e:D(e,!1,o||Q())||e,cdnLists:{npm:N,module:P,gh:W},checkCDNs:async(e,o)=>{let r=[o,...y.cdnLists.npm].filter(Boolean);for(let l of r)try{if((await fetch(y.getUrl(e,l),{method:"HEAD"})).ok)return l}catch{}return y.cdnLists.npm[0]}},Q=()=>{if(globalThis.appCDN)return globalThis.appCDN;try{return new URL(location.href).searchParams.get("appCDN")||y.cdnLists.npm[0]}catch{return y.cdnLists.npm[0]}},D=(e,o,r)=>{let l=o&&e.startsWith("unpkg:")?"?module":"";e.startsWith("gh:")?e=e.replace("gh",W[0]):e.includes(":")||(e=(r||(o?P[0]:N[0]))+":"+e);for(let c of Z){let[i,a]=c;if(i.test(e))return e.replace(i,a)+l}return null},Z=[[/^(esm\.sh:)(.+)/i,"https://esm.sh/$2"],[/^(npm:)(.+)/i,"https://esm.sh/$2"],[/^(node:)(.+)/i,"https://esm.sh/$2"],[/^(jsr:)(.+)/i,"https://esm.sh/jsr/$2"],[/^(skypack:)(.+)/i,"https://cdn.skypack.dev/$2"],[/^(jsdelivr:)(.+)/i,"https://cdn.jsdelivr.net/npm/$2"],[/^(fastly\.jsdelivr:)(.+)/i,"https://fastly.jsdelivr.net/npm/$2"],[/^(gcore\.jsdelivr:)(.+)/i,"https://gcore.jsdelivr.net/npm/$2"],[/^(testingcf\.jsdelivr:)(.+)/i,"https://testingcf.jsdelivr.net/npm/$2"],[/^(jsdelivr\.b-cdn:)(.+)/i,"https://jsdelivr.b-cdn.net/npm/$2"],[/^(jsdelivr\.gh:)(.+)/i,"https://cdn.jsdelivr.net/gh/$2"],[/^(fastly\.jsdelivr\.gh:)(.+)/i,"https://fastly.jsdelivr.net/gh/$2"],[/^(gcore\.jsdelivr\.gh:)(.+)/i,"https://gcore.jsdelivr.net/gh/$2"],[/^(testingcf\.jsdelivr\.gh:)(.+)/i,"https://testingcf.jsdelivr.net/gh/$2"],[/^(jsdelivr\.b-cdn\.gh:)(.+)/i,"https://jsdelivr.b-cdn.net/gh/$2"],[/^(statically:)(.+)/i,"https://cdn.statically.io/gh/$2"],[/^(esm\.run:)(.+)/i,"https://esm.run/$2"],[/^(jsdelivr\.esm:)(.+)/i,"https://cdn.jsdelivr.net/npm/$2/+esm"],[/^(fastly\.jsdelivr\.esm:)(.+)/i,"https://fastly.jsdelivr.net/npm/$2/+esm"],[/^(gcore\.jsdelivr\.esm:)(.+)/i,"https://gcore.jsdelivr.net/npm/$2/+esm"],[/^(testingcf\.jsdelivr\.esm:)(.+)/i,"https://testingcf.jsdelivr.net/npm/$2/+esm"],[/^(jsdelivr\.b-cdn\.esm:)(.+)/i,"https://jsdelivr.b-cdn.net/npm/$2/+esm"],[/^(jspm:)(.+)/i,"https://jspm.dev/$2"],[/^(esbuild:)(.+)/i,"https://esbuild.vercel.app/$2"],[/^(bundle\.run:)(.+)/i,"https://bundle.run/$2"],[/^(unpkg:)(.+)/i,"https://unpkg.com/$2"],[/^(npmcdn:)(.+)/i,"https://npmcdn.com/$2"],[/^(bundlejs:)(.+)/i,"https://deno.bundlejs.com/?file&q=$2"],[/^(bundle:)(.+)/i,"https://deno.bundlejs.com/?file&q=$2"],[/^(deno:)(.+)/i,"https://deno.bundlejs.com/?file&q=https://deno.land/x/$2/mod.ts"],[/^(https:\/\/deno\.land\/.+)/i,"https://deno.bundlejs.com/?file&q=$1"],[/^(github:|https:\/\/github\.com\/)(.[^\/]+?)\/(.[^\/]+?)\/(?!releases\/)(?:(?:blob|raw)\/)?(.+?\/.+)/i,"https://deno.bundlejs.com/?file&q=https://cdn.jsdelivr.net/gh/$2/$3@$4"],[/^(gist\.github:)(.+?\/[0-9a-f]+\/raw\/(?:[0-9a-f]+\/)?.+)$/i,"https://gist.githack.com/$2"],[/^(gitlab:|https:\/\/gitlab\.com\/)([^\/]+.*\/[^\/]+)\/(?:raw|blob)\/(.+?)(?:\?.*)?$/i,"https://deno.bundlejs.com/?file&q=https://gl.githack.com/$2/raw/$3"],[/^(bitbucket:|https:\/\/bitbucket\.org\/)([^\/]+\/[^\/]+)\/(?:raw|src)\/(.+?)(?:\?.*)?$/i,"https://deno.bundlejs.com/?file&q=https://bb.githack.com/$2/raw/$3"],[/^(bitbucket:)snippets\/([^\/]+\/[^\/]+)\/revisions\/([^\/\#\?]+)(?:\?[^#]*)?(?:\#file-(.+?))$/i,"https://bb.githack.com/!api/2.0/snippets/$2/$3/files/$4"],[/^(bitbucket:)snippets\/([^\/]+\/[^\/\#\?]+)(?:\?[^#]*)?(?:\#file-(.+?))$/i,"https://bb.githack.com/!api/2.0/snippets/$2/HEAD/files/$3"],[/^(bitbucket:)\!api\/2.0\/snippets\/([^\/]+\/[^\/]+\/[^\/]+)\/files\/(.+?)(?:\?.*)?$/i,"https://bb.githack.com/!api/2.0/snippets/$2/files/$3"],[/^(api\.bitbucket:)2.0\/snippets\/([^\/]+\/[^\/]+\/[^\/]+)\/files\/(.+?)(?:\?.*)?$/i,"https://bb.githack.com/!api/2.0/snippets/$2/files/$3"],[/^(rawgit:)(.+?\/[0-9a-f]+\/raw\/(?:[0-9a-f]+\/)?.+)$/i,"https://gist.githack.com/$2"],[/^(rawgit:|https:\/\/raw\.githubusercontent\.com)(\/[^\/]+\/[^\/]+|[0-9A-Za-z-]+\/[0-9a-f]+\/raw)\/(.+)/i,"https://deno.bundlejs.com/?file&q=https://raw.githack.com/$2/$3"]];var{getUrl:X,getModuleUrl:le}=y;var F=X("easyqrcodejs@4.6.1/dist/easy.qrcode.min.js");var O=async({container:e,url:o,title:r,logo:l})=>{let c=await B(F,"QRCode");e.style.visibility="hidden";let i=new c(e,{text:o,logo:l,width:200,height:200,drawer:"canvas",onRenderingEnd:(a,m)=>{e.innerHTML="";let u=document.createElement("img");u.src=m,u.style.cursor="pointer",u.title=window.deps.translateString("share.qrcode.clickToDownload","Click to download"),u.onclick=()=>i.download(j(r||"LiveCodes","-")),e.appendChild(u),e.style.visibility="visible"}})};var v=()=>document.querySelector("#qrcode-container");var s=encodeURIComponent,fe=async(e,o,r)=>{let l,c=t=>{(!t||!C(t))&&T(window.deps.translateString("share.error.failedToCopy","Copy to clipboard failed!")),T(window.deps.translateString("share.copy.copied","URL copied to clipboard")),l=setTimeout(()=>{T(window.deps.translateString("share.copy.clickToCopy","Click to copy"))},5e3)},i=async()=>{let t=v();if(f.style.visibility="hidden",t.style.display="flex",q="",q){h?.classList.add("short-url"),d&&p&&(d.value=p.url);return}p||await U(),p&&await O({container:t,url:p.url,title:p.title,logo:o+"assets/images/livecodes-logo.svg"})},a=(t,n,w)=>{w&&(w.innerHTML="",n.forEach(x=>{let H=document.createElement("li"),L=document.createElement("a");L.href=x.createShareUrl?.(t)||"#",L.target="blank",L.rel="noopener noreferrer",L.innerHTML=`
|
|
<span class="share-image-container">
|
|
<i class="${x.icon}"
|
|
alt="${x.name}"
|
|
${x.name===window.deps.translateString("share.services.twitter","\u{1D54F} / Twitter")?'class="twitter"':""}
|
|
></i>
|
|
</span>
|
|
${x.name}
|
|
`,x.onClick&&r.addEventListener(L,"click",async G=>{G.preventDefault(),x.onClick?.(t)}),H.appendChild(L),w.appendChild(H),x.name===window.deps.translateString("share.services.share","Share via \u2026")&&!navigator.share&&H.remove()}),d&&(d.value=t.url),T(window.deps.translateString("share.copy.clickToCopy","Click to copy")))},m=[{name:window.deps.translateString("share.services.facebook","Facebook"),icon:"icon-share-facebook",createShareUrl:({url:t})=>`https://www.facebook.com/sharer.php?u=${s(t)}`},{name:window.deps.translateString("share.services.twitter","\u{1D54F} / Twitter"),icon:"icon-share-x",createShareUrl:({url:t,title:n})=>`https://twitter.com/intent/tweet?url=${s(t)}&text=${s(n)}`},{name:window.deps.translateString("share.services.hackerNews","Hacker News"),icon:"icon-share-hacker",createShareUrl:({url:t,title:n})=>`https://news.ycombinator.com/submitlink?u=${s(t)}&t=${s(n)}`},{name:window.deps.translateString("share.services.reddit","Reddit"),icon:"icon-share-reddit",createShareUrl:({url:t,title:n})=>`https://www.reddit.com/submit?url=${s(t)}&title=${s(n)}`},{name:window.deps.translateString("share.services.linkedIn","LinkedIn"),icon:"icon-share-linkedin",createShareUrl:({url:t,title:n})=>`https://www.linkedin.com/shareArticle?url=${s(t)}&title=${s(n)}&mini=true&source=LiveCodes`},{name:window.deps.translateString("share.services.devTo","Dev.to"),icon:"icon-share-dev",createShareUrl:({url:t,title:n})=>`https://dev.to/new?prefill=${s(`---
|
|
title: `+n+`
|
|
published: true
|
|
tags: livecodes
|
|
---
|
|
|
|
|
|
|
|
`+t)}`},{name:window.deps.translateString("share.services.tumblr","Tumblr"),icon:"icon-share-tumblr",createShareUrl:({url:t,title:n})=>`https://www.tumblr.com/share/link?url=${s(t)}&name=${s(n)}`},{name:window.deps.translateString("share.services.pinterest","Pinterest"),icon:"icon-share-pinterest",createShareUrl:({url:t,title:n})=>`https://pinterest.com/pin/create/bookmarklet/?url=${s(t)}&description=${s(n)}`},{name:window.deps.translateString("share.services.whatsApp","WhatsApp"),icon:"icon-share-whatsapp",createShareUrl:({url:t,title:n})=>`https://api.whatsapp.com/send?text=${s(n)} ${s(t)}`},{name:window.deps.translateString("share.services.telegram","Telegram"),icon:"icon-share-telegram",createShareUrl:({url:t,title:n})=>`https://t.me/share/url?url=${s(t)}&text=${s(n)}`},{name:window.deps.translateString("share.services.pocket","Pocket"),icon:"icon-share-pocket",createShareUrl:({url:t,title:n})=>`https://getpocket.com/save?url=${s(t)}&title=${s(n)}`},{name:window.deps.translateString("share.services.email","Email"),icon:"icon-share-email",createShareUrl:({url:t,title:n})=>`mailto:?subject=${s(n)}&body=${s(t)}`},{name:window.deps.translateString("share.services.qrCode","QR code"),icon:"icon-share-qr",onClick:i},{name:window.deps.translateString("share.services.share","Share via \u2026"),icon:"icon-share",onClick:({url:t,title:n})=>navigator.share({url:t,title:n})}],u=!$(),k=document.createElement("div"),S=await e(!1,!1),p,q,E=S.url.length;k.innerHTML=R.replace(/{{urlLength}}/g,String(E)).replace(/{{warnClass}}/g,E>2048?"danger":"warn");let g=k.firstChild;u?g.querySelector("#share-expiry").outerHTML="":g.querySelector("#share-expiry-self-hosted").outerHTML="";let f=g.querySelector("#share-links"),b=g.querySelector("#share-permanent-url-checkbox"),M=g.querySelector("#share-click-to-copy"),d=g.querySelector("#share-url-input"),h=g.querySelector(".share-expiry"),z=h?.querySelector(".share-encoded-url-expiry a"),V=h?.querySelector(".share-short-url-expiry a"),_=h?.querySelector(".share-encoded-url-expiry span");_.dataset.i18nInterpolation=JSON.stringify({urlLength:E});let T=t=>{M&&(clearTimeout(l),M.innerHTML=t)};a(S,m,f);let U=async t=>{t?.preventDefault(),T(window.deps.translateString("share.generateURL","Generating URL \u2026"));try{p=p||await e(!0,b.checked),a(p,m,f),h?.classList.add("short-url")}catch{T(window.deps.translateString("share.error.failedToGenerateURL","Failed to generate short URL!"))}};return r.addEventListener(z,"click",U),r.addEventListener(V,"click",t=>{t.preventDefault(),a(S,m,f),h?.classList.remove("short-url");let n=v();n.style.display="none",f.style.visibility="visible"}),r.addEventListener(b,"change",async()=>{S=await e(!1,b.checked),p&&(p=await e(!0,b.checked));let t=h?.classList.contains("short-url")?p:S;a(t,m,f)}),r.addEventListener(d,"click",function(){c(d?.value),d?.select()}),r.addEventListener(M,"click",function(t){t.preventDefault(),c(d?.value),d?.select()}),g};export{fe as createShareContainer};
|