1 line
6.2 KiB
JavaScript
1 line
6.2 KiB
JavaScript
function fcn_getSkins(){const n=fcn_getCookie("fcnLoggedIn");if(!n)return null;const t={data:{},active:null,fingerprint:n},i=fcn_parseJSON(localStorage.getItem("fcnSkins"))??t;return i?.fingerprint&&n===i.fingerprint?(("object"!=typeof i.data||Array.isArray(i.data))&&(i.data={}),i):t}function fcn_setSkins(n){"object"!=typeof n||null===n||"object"!=typeof n.data||Array.isArray(n.data)?fcn_showNotification(fcn_skinTranslations.invalidJson,3,"warning"):n?.fingerprint&&fcn_getCookie("fcnLoggedIn")===n.fingerprint?localStorage.setItem("fcnSkins",JSON.stringify(n)):fcn_showNotification(fcn_skinTranslations.wrongFingerprint,3,"warning")}function fcn_getSkinInfo(n){const t=n.match(/Name:\s*(.+)/),i=n.match(/Author:\s*(.+)/),e=n.match(/Version:\s*(.+)/);return{name:t?fcn_sanitizeHTML(t[1].trim()):null,author:i?fcn_sanitizeHTML(i[1].trim()):null,version:e?fcn_sanitizeHTML(e[1].trim()):null}}function fcn_toggleSkin(n){const t=n.closest('[data-css-skin-finder="skin-item"]'),i=fcn_getSkins();t.classList.contains("active")?(_$$('[data-css-skin-finder="skin-item"]').forEach((n=>n.classList.remove("active"))),i.active=null):(_$$('[data-css-skin-finder="skin-item"]').forEach((n=>n.classList.remove("active"))),t.classList.add("active"),i.active=n.dataset.skinId),fcn_setSkins(i),fcn_applySkin()}function fcn_deleteSkin(n){const t=n.closest('[data-css-skin-finder="skin-item"]'),i=fcn_getSkins();t.classList.contains("active")&&(i.active=null),delete i.data[n.dataset.skinId],_$('[data-css-skin-target="file"]').value="",fcn_setSkins(i),fcn_renderSkinList(),fcn_applySkin()}function fcn_applySkin(){const n=fcn_getCookie("fcnLoggedIn");if(!n||_$("body.wp-admin"))return;const t=fcn_getSkins();if(_$$$("fictioneer-active-custom-skin")?.remove(),t?.fingerprint===n&&t?.data?.[t.active]?.css){const n=document.createElement("style");n.textContent=t.data[t.active].css,n.id="fictioneer-active-custom-skin",_$("head").appendChild(n)}}function fcn_renderSkinList(){const n=_$('[data-css-skin-target="list"]'),t=fcn_getCookie("fcnLoggedIn");if(!t||!n)return;const i=fcn_getSkins();n.innerHTML="",i?.fingerprint===t?(i?.data&&Object.keys(i.data).length>0&&(Object.entries(i.data).forEach((([t,e])=>{const s=_$('[data-css-skin-target="template"]').content.cloneNode(!0);i.active===t&&s.querySelector('[data-css-skin-finder="skin-item"]').classList.add("active"),s.querySelector('[data-action="click->css-skin#toggle"]').dataset.skinId=t,s.querySelector('[data-action="click->css-skin#delete"]').dataset.skinId=t,s.querySelector('[data-css-skin-finder="name"]').innerText=e.name,s.querySelector('[data-css-skin-finder="version"]').innerText=e.version,s.querySelector('[data-css-skin-finder="author"]').innerText=e.author,n.appendChild(s)})),_$$('[data-action="click->css-skin#toggle"]').forEach((n=>{n.addEventListener("click",(n=>fcn_toggleSkin(n.currentTarget)))})),_$$('[data-action="click->css-skin#delete"]').forEach((n=>{n.addEventListener("click",(n=>fcn_deleteSkin(n.currentTarget)))}))),Object.keys(i.data).length>2?_$('[data-css-skin-target="form"]').style.display="none":_$('[data-css-skin-target="form"]').style.display=""):_$('[data-css-skin-target="form"]').style.display=""}function fcn_uploadSkins(n){if(!fcn_isUserLoggedIn()||n.classList.contains("disabled"))return;const t=fcn_getSkins();fcn_toggleInProgress(n),_$('[data-css-skin-target="action-status-message"]').classList.add("invisible"),fcn_ajaxPost({action:"fictioneer_ajax_save_skins",fcn_fast_ajax:1,skins:JSON.stringify(t)}).then((n=>{n.success?(fcn_showNotification(n.data.message,3,"success"),fcn_toggleSkinNotice(_$('[data-css-skin-target="action-status-message"]'))):(fcn_showNotification(n.data.failure??n.data.error??fictioneer_tl.notification.error,3,"warning"),(n.data.error||n.data.failure)&&console.error("Error:",n.data.error??n.data.failure))})).catch((n=>{n.status&&n.statusText&&fcn_showNotification(`${n.status}: ${n.statusText}`,3,"warning"),console.error(n)})).then((()=>{_$('[data-css-skin-target="file"]').value="",fcn_toggleInProgress(n)}))}function fcn_downloadSkins(n){fcn_isUserLoggedIn()&&!n.classList.contains("disabled")&&(fcn_toggleInProgress(n),_$('[data-css-skin-target="action-status-message"]').classList.add("invisible"),fcn_ajaxPost({action:"fictioneer_ajax_get_skins",fcn_fast_ajax:1}).then((n=>{n.success?(fcn_showNotification(n.data.message,3,"success"),fcn_toggleSkinNotice(_$('[data-css-skin-target="action-status-message"]')),fcn_setSkins(JSON.parse(n.data.skins)),fcn_renderSkinList(),fcn_applySkin()):(fcn_showNotification(n.data.failure??n.data.error??fictioneer_tl.notification.error,3,"warning"),(n.data.error||n.data.failure)&&console.error("Error:",n.data.error??n.data.failure))})).catch((n=>{n.status&&n.statusText&&fcn_showNotification(`${n.status}: ${n.statusText}`,3,"warning"),console.error(n)})).then((()=>{_$('[data-css-skin-target="file"]').value="",fcn_toggleInProgress(n)})))}function fcn_toggleSkinNotice(n){n.classList.remove("invisible"),setTimeout((()=>{n.classList.add("invisible")}),3e3)}fcn_renderSkinList(),_$('[data-css-skin-target="file"]')?.addEventListener("input",(n=>{n.preventDefault();const t=n.currentTarget,i=t.files[0],e=fcn_getSkins(),s=fcn_getCookie("fcnLoggedIn");if(console.log(t),Object.keys(e.data).length>2)return void fcn_showNotification(fcn_skinTranslations.tooManySkins,3,"warning");if(e?.fingerprint!==s)return void fcn_showNotification(fcn_skinTranslations.wrongFingerprint,3,"warning");if(!i)return;if(i.size>2e5)return void fcn_showNotification(fcn_skinTranslations.fileTooLarge,3,"warning");if("text/css"!==i.type)return void fcn_showNotification(fcn_skinTranslations.wrongFileType,3,"warning");const a=new FileReader;a.onload=n=>{const t=n.target.result,i=fcn_getSkinInfo(t),e=fcn_getSkins();if(!fcn_validateCss(t))return void fcn_showNotification(fcn_skinTranslations.invalidCss,5,"warning");if(!i.name)return void fcn_showNotification(fcn_skinTranslations.missingMetaData,3,"warning");const s=btoa(i.name);e.data[s]={name:i.name,version:i.version,author:i.author,css:t},fcn_setSkins(e),fcn_renderSkinList()},a.onerror=()=>{console.error(a.error),fcn_showNotification(a.error,3,"warning")},a.readAsText(i)})),_$('[data-action="click->css-skin#upload"]')?.addEventListener("click",(n=>{fcn_uploadSkins(n.currentTarget)})),_$('[data-action="click->css-skin#download"]')?.addEventListener("click",(n=>{fcn_downloadSkins(n.currentTarget)})); |