-
Notifications
You must be signed in to change notification settings - Fork 0
/
custom_fonts.min.js
1 lines (1 loc) · 5.16 KB
/
custom_fonts.min.js
1
const template=get("template"),fontsDiv=get("fontsDiv"),fontNameInput=get("fontNameInput"),localNameInput=get("localNameInput"),urlInput=get("urlInput"),addButton=get("addButton"),infoLabel=get("infoLabel"),fontTest=get("fontTest"),templateDiv=template.content.querySelector("div");let displayedFonts=[];const allWudoohFonts=["Aldhabi","Almarai","Amiri","Amiri Quran","Andalus","Arabic Typesetting","Aref Ruqaa","Cairo","Changa","Droid Arabic Naskh","Dubai","El Messiri","Harmattan","Jomhuria","Katibeh","Lalezar","Lateef","Lemonada","Mada","Markazi Text","Mehr Nastaliq","Mirza","Neo Sans Arabic","Noto Kufi Arabic","Noto Naskh Arabic","Noto Nastaliq Urdu","Noto Sans Arabic","Rakkas","Reem Kufi","Rooznameh","Sahl Naskh","Scheherazade","Shakstah","Simplified Arabic","Tajawal","Traditional Arabic","Urdu Typesetting","sans-serif","Times New Roman","Arial","Calibri","Original"];async function initializeCustomFontsPage(){const t=await sync.get([keyCustomFonts]);displayedFonts=[],(await injectCustomFonts(t.customFonts)).forEach(t=>{displayFont(t),displayedFonts.push(t.fontName)})}async function injectTemporaryCustomFont(t){let n=get("wudoohTempCustomFontsStyle");n||((n=document.createElement("style")).id="wudoohTempCustomFontsStyle",document.head.append(n)),n.innerHTML=CustomFont.injectCSS(t)}async function notifyAllTabsCustomFontsChanged(t){injectCustomFonts(t),(await tabs.queryAllTabs()).forEach(n=>{let e={reason:reasonInjectCustomFonts,customFonts:t};tabs.sendMessage(n.id,e)})}function displayFont(t){const n=t.fontName,e=t.localName,a=t.url,o=document.importNode(templateDiv,!0),i=o.children.namedItem("templateFontTitle"),s=o.getElementsByTagName("input"),l=s.namedItem("templateFontNameInput"),u=s.namedItem("templateUrlInput"),m=s.namedItem("templateLocalNameInput"),c=o.children.namedItem("templateDeleteButton"),d=o.children.namedItem("templateCheckIcon"),r=o.children.namedItem("templateErrorIcon"),p=o.children.namedItem("templateInfoText"),y=[o,i,l,u,m,c,d,r,p];function f(t){o.setAttribute("fontName",t)}f(n),d.style.display="none",r.style.display="none",l.value=n,u.value=a,m.value=e,p.innerText="";const b=`-${t.fontName}`;async function F(t,n){const e=(await sync.get([keyCustomFonts])).customFonts,a=e.find(t=>t.fontName===o.getAttribute("fontName"));a[t]=n,e[e.indexOf(a)]=a,await sync.set({customFonts:e}),f(a.fontName),await notifyAllTabsCustomFontsChanged(e),i.style.fontFamily=a.fontName}y.forEach(t=>t.id+=b),i.style.fontFamily=n,l.oninput=(()=>l.postDelayed(defaultDelay,()=>{const t=l.value;return t?displayedFonts.contains(t)||allWudoohFonts.contains(t)?(p.style.display="block",void(p.innerText="A font with this Font Name already exists!")):(p.innerText="",void F("fontName",t)):(p.style.display="block",void(p.innerText="Font Name cannot be empty!"))}));const h=async()=>{const t=u.value,n=m.value;if(!(t&&""!==t||n&&""!==n))return p.style.display="block",void(p.innerText="URL and local cannot both be empty!");p.innerText="",await F("localName",n),await F("url",t)};u.oninput=h,m.oninput=h,c.onclick=(async()=>{if(confirm(`Are you sure you want to delete font ${l.value}\nThis cannot be undone`)){const t=l.value,n=(await sync.get([keyCustomFonts])).customFonts.filter(n=>n.fontName!==t);await sync.set({customFonts:n}),notifyAllTabsCustomFontsChanged(n),displayedFonts=n.map(t=>t.fontName),o.parentNode.removeChild(o)}}),fontsDiv.appendChild(o)}function inputOnInput(){this.postDelayed(defaultDelay,()=>{const t=fontNameInput.value,n=urlInput.value,e=localNameInput.value;return injectTemporaryCustomFont(new CustomFont(t,e,n)),fontTest.style.fontFamily=t,t&&""!==t?n&&""!==n||e&&""!==e?displayedFonts.contains(t)||allWudoohFonts.contains(t)?(infoLabel.style.display="block",void(infoLabel.innerText="A font with this Font Name already exists!")):void(infoLabel.innerText=""):(infoLabel.style.display="block",void(infoLabel.innerText="URL and local cannot both be empty!")):(infoLabel.style.display="block",void(infoLabel.innerText="Font Name cannot be empty!"))})}async function addButtonOnClick(){let t=fontNameInput.value,n=urlInput.value,e=localNameInput.value;if(""==t&&(t=null),""==n&&(n=null),""==e&&(e=null),!t)return infoLabel.style.display="block",void(infoLabel.innerText="Font Name cannot be empty!");if(!n&&!e)return infoLabel.style.display="block",void(infoLabel.innerText="URL and local cannot both be empty!");if(displayedFonts.contains(t)||allWudoohFonts.contains(t))return infoLabel.style.display="block",void(infoLabel.innerText="A font with this Font Name already exists!");infoLabel.innerText="";const a=(await sync.get([keyCustomFonts])).customFonts,o=new CustomFont(t,e,n);a.push(o),await sync.set({customFonts:a}),displayFont(o),displayedFonts.push(o.fontName),notifyAllTabsCustomFontsChanged(a),infoLabel.style.display="none",fontNameInput.value="",urlInput.value="",localNameInput.value=""}function customFontsAddListeners(){function t(t){"Enter"===t.code&&addButton.click()}document.addEventListener("DOMContentLoaded",initializeCustomFontsPage),fontNameInput.onkeypress=t,localNameInput.onkeypress=t,urlInput.onkeypress=t,fontNameInput.oninput=inputOnInput,localNameInput.oninput=inputOnInput,urlInput.oninput=inputOnInput,addButton.onclick=addButtonOnClick}analytics("/custom_fonts.html"),customFontsAddListeners();