fictioneer/js/admin.min.js
2024-06-06 12:21:06 +02:00

1 line
19 KiB
JavaScript

function fcn_toggleInProgress(e,t=null){(t=null!==t?t:!e.disabled)?(e.dataset.enableWith=e.innerHTML,e.innerHTML=e.dataset.disableWith,e.disabled=!0,e.classList.add("disabled")):(e.innerHTML=e.dataset.enableWith,e.disabled=!1,e.classList.remove("disabled"))}function fcn_purgeSchema(e){const t=_$(`a[data-id="${e}"]`),a=t.closest(".row-actions");t.closest("tr").classList.add("no-schema"),a.remove(),fcn_ajaxPost({action:"fictioneer_ajax_purge_schema",nonce:document.getElementById("fictioneer_admin_nonce").value,post_id:e}).then((e=>{e.success||console.log(e.data)})).catch((e=>{console.log(e)}))}function fcn_purgeAllSchemas(e=0,t=null,a=0){const o=_$$("[data-action-purge-all-schemas]");null===t&&o.forEach((e=>{fcn_toggleInProgress(e,!0)})),fcn_ajaxPost({action:"fictioneer_ajax_purge_all_schemas",offset:e,nonce:document.getElementById("fictioneer_admin_nonce").value}).then((e=>{if(e.data.finished)o.forEach((e=>{fcn_toggleInProgress(e,!1)})),_$$("tr").forEach((e=>{e.classList.add("no-schema")}));else{const t=parseInt(a/Math.max(e.data.total,1)*100),n=t>0?` ${t} %`:"";o.forEach((e=>{e.innerHTML=e.dataset.disableWith+n})),fcn_purgeAllSchemas(e.data.next_offset,e.data.total,a+e.data.processed)}})).catch((e=>{console.log(e)}))}function fcn_delete_epub(e){fcn_ajaxPost({action:"fictioneer_ajax_delete_epub",name:e,nonce:document.getElementById("fictioneer_admin_nonce").value}).then((t=>{t.success?document.querySelector(`[data-action="delete-epub"][data-name="${e}"]`).closest("tr").remove():console.log(t)})).catch((e=>{console.log(e)}))}function fcn_ogMediaUpload(e){e.preventDefault();var t=wp.media({multiple:!1,library:{type:"image"}}).open().on("select",(function(){const e=t.state().get("selection").first().toJSON();_$$$("fictioneer-seo-og-image").value=e.id,_$$$("fictioneer-seo-og-display").setAttribute("src",e.url),_$$$("fictioneer-button-seo-og-image-remove").classList.remove("hidden"),_$(".og-source").classList.add("hidden")}))}function fcn_update_seo_title_chars(){const e=_$$$("fictioneer-seo-title");_$$$("fictioneer-seo-title-chars").innerHTML=`(${e.value.length}/70)`}function fcn_remove_seo_og_image(e){e.preventDefault();const t=_$$$("fictioneer-seo-og-display").dataset.placeholder;_$$$("fictioneer-seo-og-image").value="",_$$$("fictioneer-seo-og-display").setAttribute("src",t),_$$$("fictioneer-button-seo-og-image-remove").classList.add("hidden")}function fcn_confirmIt(e){const t=e.currentTarget.dataset.dialogMessage,a=e.currentTarget.dataset.dialogConfirm;if(!t||!a)return;const o=prompt(t);o?o.toLowerCase()!=a.toLowerCase()&&e.preventDefault():e.preventDefault()}function fcn_imageMediaUpload(e){e.preventDefault();const t=e.currentTarget.closest('[data-target="fcn-meta-field-image"]');var a=wp.media({multiple:!1,library:{type:"image"}}).open().on("select",(()=>{const e=a.state().get("selection").first().toJSON();t.querySelector('[data-target="fcn-meta-field-image-id"]').value=e.id,t.querySelector(".fictioneer-meta-field__image-display").style.backgroundImage=`url("${e.url}")`,t.querySelector(".fictioneer-meta-field__image-upload").classList.add("hidden"),t.querySelector(".fictioneer-meta-field__image-actions").classList.remove("hidden")}))}function fcn_ebookMediaUpload(e){e.preventDefault();const t=e.currentTarget.closest('[data-target="fcn-meta-field-ebook"]');var a=wp.media({multiple:!1,library:{type:["application/pdf","text/plain","application/rtf","application/x-mobipocket-ebook","application/epub+zip"]}}).open().on("select",(()=>{const e=a.state().get("selection").first().toJSON();t.querySelector('[data-target*="id"]').value=e.id,t.querySelector('[data-target*="name"]').textContent=e.title,t.querySelector('[data-target*="size"]').textContent=e.filesizeHumanReadable,t.querySelector('[data-target*="filename"]').textContent=e.filename,t.querySelector('[data-target*="filename"]').href=e.url,t.querySelector('[data-target*="upload"]').classList.add("hidden"),t.querySelectorAll('[data-target*="replace"], [data-target*="remove"], [data-target*="display"]').forEach((e=>e.classList.remove("hidden")))}))}function fcn_ebookMediaRemove(e){e.preventDefault();const t=e.currentTarget.closest('[data-target="fcn-meta-field-ebook"]');t.querySelector('[data-target*="id"]').value=0,t.querySelector('[data-target*="name"]').textContent="",t.querySelector('[data-target*="size"]').textContent="",t.querySelector('[data-target*="filename"]').textContent="",t.querySelector('[data-target*="filename"]').href="",t.querySelector('[data-target*="upload"]').classList.remove("hidden"),t.querySelectorAll('[data-target*="replace"], [data-target*="remove"], [data-target*="display"]').forEach((e=>e.classList.add("hidden")))}function fcn_tokensToggle(e,t){if(e<1)return void(t.querySelector("select").value=0);const a=JSON.parse(t.querySelector('[data-target="fcn-meta-field-tokens-options"]').value),o=t.querySelector('[data-target="fcn-meta-field-tokens-track"]'),n=t.querySelector('[data-target="fcn-meta-field-tokens-values"]'),r=fcn_splitList(n.value).filter((e=>!isNaN(e))).map((e=>Math.abs(parseInt(e)))),c=r.indexOf(e);-1===c?r.push(e):r.splice(c,1),n.value=r.join(", "),o.innerHTML="",r.forEach((e=>{const t=fcn_sanitizeHTML(a[e]?a[e]:e);o.innerHTML+=`<span class="fictioneer-meta-field__token" data-id="${e}"><span class="fictioneer-meta-field__token-name">${t}</span><button type="button" class="fictioneer-meta-field__token-button" data-id="${e}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" focusable="false"><path d="M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z"></path></svg></button></span>`})),t.querySelector("select").value=0}function fcn_insertIconClass(e){const t=e.closest(".fictioneer-meta-field");t&&e&&(t.querySelector(".fictioneer-meta-field__input").value=e.dataset.value,t.querySelector(".fictioneer-meta-field__fa-icon").setAttribute("class",`fictioneer-meta-field__fa-icon ${e.dataset.value}`))}function fcn_checkRequiredFields(){let e=null;_$$(".fictioneer-meta-field [required]").forEach((t=>{!0!==e&&(e=""===t?.value.trim())})),e?wp.data?.dispatch("core/editor").lockPostSaving("requiredValueLock"):wp.data?.dispatch("core/editor").unlockPostSaving("requiredValueLock")}function fcn_setGroupDataList(e){const t=e.value,a=e.dataset.target;_$$$(a)?.remove(),0!=t&&fcn_ajaxGet({action:"fictioneer_ajax_get_chapter_groups",story_id:t,nonce:fictioneer_ajax.fictioneer_nonce}).then((e=>{if(e.success){const t=fcn_html`<datalist id="${a}">${e.data.html}</datalist>>`;document.body.appendChild(t)}else e.data.error&&console.log(e.data.error)}))}var relationshipSearchTimer,fcn_unlockPostsTimer;function fcn_observeRelationshipSource(e){const t=e.closest(".fictioneer-meta-field"),a=new IntersectionObserver(((e,a)=>{e.forEach((e=>{if(e.isIntersecting){let o=t.querySelector('[data-target="fcn-relationships-search"]')?.value??"";o.length>200&&(o=o.slice(0,200)),fcn_queryRelationshipPosts({action:e.target.dataset.ajaxAction,page:e.target.dataset.page,nonce:e.target.dataset.nonce,key:e.target.dataset.key,post_id:e.target.dataset.postId,search:o,post_type:t.querySelector('[data-target="fcn-relationships-post-type"]')?.value??"",fcn_fast_ajax:1},e.target.closest('[data-target="fcn-relationships-source"')),a.unobserve(e.target)}}))}),{root:e,rootMargin:"0px",threshold:.5});e.querySelectorAll('[data-target="fcn-relationships-observer"]').forEach((e=>{a.observe(e)}))}function fcn_queryRelationshipPosts(e,t,a=!0){const o=t.closest(".fictioneer-meta-field"),n=o.querySelector('[data-target="fcn-relationships-source"]'),r=o.querySelector('[data-target="fcn-relationships-values"]');let c=null;fcn_ajaxPost(e).then((e=>(t.querySelector('[data-target="fcn-relationships-observer"]')?.remove(),e))).then((e=>{e.success?(a?t.innerHTML+=e.data.html:t.innerHTML=e.data.html,t.querySelectorAll("li").forEach((e=>{r.querySelector(`[data-id="${e.dataset.id}"]`)&&e.classList.add("disabled")})),fcn_observeRelationshipSource(t)):c=e.data.error})).catch((e=>{c=e})).then((()=>{if(c){const e=o.querySelector('[data-target="loading-error-template"]').content.cloneNode(!0);e.querySelector(".error-message").textContent=c,n.appendChild(e)}}))}function fcn_removeRelationship(e){const t=e.closest(".fictioneer-meta-field");if(!t)return;const a=t.querySelector('[data-target="fcn-relationships-source"]').querySelector(`[data-id="${e.dataset.id}"]`);a&&a.classList.remove("disabled"),e.remove()}function fcn_addRelationship(e,t){if(!e||!t||e.classList.contains("disabled"))return;const a=e.closest(".fictioneer-meta-field").querySelector('[data-target="selected-item-template"]').content.cloneNode(!0);a.querySelector("li").setAttribute("data-id",e.dataset.id),a.querySelector('input[type="hidden"]').value=e.dataset.id,a.querySelector("span").innerHTML=e.querySelector("span").innerHTML,e.dataset.info&&a.querySelector("li").setAttribute("data-info",e.dataset.info),t.appendChild(a),e.classList.add("disabled")}function fcn_unlockPostsHandleClicks(e){if(e)switch(e.dataset.target){case"fcn-unlock-posts-delete":e.closest('[data-target="fcn-unlock-posts-item"').remove();break;case"fcn-unlock-posts-search-item":fcn_unlockPostsAdd(e)}}function fcn_unlockPostsSearch(){const e=_$(".unlock-posts"),t=_$('[data-target="fcn-unlock-posts-search"]'),a=_$('[data-target="fcn-unlock-posts-search-results"]'),o=_$('[data-target="fcn-unlock-posts-selected"]');if(!e||!t||!t.value&&!_$('[data-target="fcn-unlock-posts-search-item"]'))return;const n={action:"fictioneer_ajax_search_posts_to_unlock",search:t.value,type:_$('[data-target="fcn-unlock-posts-select"]')?.value||"any",nonce:e.querySelector('[name="unlock_posts_nonce"]').value};e.classList.add("ajax-in-progress"),fcn_ajaxPost(n).then((e=>{e.success?a.innerHTML=e.data.html:a.innerHTML=e.data.error})).catch((e=>{a.innerHTML=e})).then((()=>{e.classList.remove("ajax-in-progress"),a.querySelectorAll('[data-target="fcn-unlock-posts-search-item"]').forEach((e=>{o.querySelector(`[data-post-id="${e.dataset.postId}"]`)&&e.remove()}))}))}function fcn_unlockPostsAdd(e){const t=_$('[data-target="fcn-unlock-posts-item-template"]').content.cloneNode(!0),a=t.querySelector(".unlock-posts__item");a.dataset.postId=e.dataset.postId,a.title=e.title,a.querySelector('input[type="hidden"]').value=e.dataset.postId,a.querySelector(".unlock-posts__item-title").innerText=e.querySelector(".unlock-posts__item-title").innerText,a.querySelector(".unlock-posts__item-meta").innerText=e.querySelector(".unlock-posts__item-meta").innerText,_$('[data-target="fcn-unlock-posts-selected"]').appendChild(t),e.remove()}_$$("[data-purge-schema]").forEach((e=>{e.addEventListener("click",(e=>{e.preventDefault(),fcn_purgeSchema(e.currentTarget.dataset.id)}))})),_$$("[data-action-purge-all-schemas]").forEach((e=>{e.addEventListener("click",(e=>{e.preventDefault(),fcn_purgeAllSchemas()}))})),_$$('[data-fcn-dialog-target="schema-dialog"]').forEach((e=>{e.addEventListener("click",(e=>{const t=_$('[data-target="schema-content"]');t.value=e.currentTarget.closest("tr").querySelector("[data-schema-id]").textContent,t.scrollTop=0,setTimeout((()=>{t.scrollTop=0}),10)}))})),_$$('[data-action="delete-epub"]').forEach((e=>{e.addEventListener("click",(e=>{e.preventDefault(),fcn_delete_epub(e.target.dataset.name)}))})),(button=_$$$("fictioneer-button-og-upload"))&&button.addEventListener("click",fcn_ogMediaUpload),(button=_$$$("fictioneer-seo-title"))&&(fcn_update_seo_title_chars(),button.addEventListener("keyup",fcn_update_seo_title_chars)),(button=_$$$("fictioneer-button-seo-og-image-remove"))&&button.addEventListener("click",fcn_remove_seo_og_image),_$$("[data-confirm-dialog]").forEach((e=>{e.addEventListener("click",(e=>{fcn_confirmIt(e)}))})),_$("#wp-admin-bar-logout a")?.addEventListener("click",(()=>{localStorage.removeItem("fcnProfileAvatar"),localStorage.removeItem("fcnUserData"),localStorage.removeItem("fcnAuth"),localStorage.removeItem("fcnBookshelfContent"),localStorage.removeItem("fcnChapterBookmarks")})),_$(".fictioneer-settings")?.addEventListener("click",(e=>{const t=e.target.closest("[data-click]"),a=t?.dataset.click;if(a&&"warning-dialog"===a)confirm(t.dataset.dialog)||e.preventDefault()})),_$$("[data-fcn-dialog-target]").forEach((e=>{e.addEventListener("click",(e=>{_$$$(e.currentTarget.dataset.fcnDialogTarget)?.showModal()}))})),_$$('.fictioneer-dialog button[formmethod="dialog"][value="cancel"]').forEach((e=>{e.addEventListener("click",(e=>{e.preventDefault(),e.currentTarget.closest("dialog").close()}))})),_$$(".fictioneer-dialog").forEach((e=>{e.addEventListener("mousedown",(e=>{"dialog"===e.target.tagName.toLowerCase()&&e.target.close()}))})),_$$(".fictioneer-meta-field__image-upload, .fictioneer-meta-field__image-replace").forEach((e=>{e.addEventListener("click",fcn_imageMediaUpload)})),_$$(".fictioneer-meta-field__image-remove").forEach((e=>{e.addEventListener("click",(e=>{e.preventDefault();const t=e.currentTarget.closest('[data-target="fcn-meta-field-image"]');t.querySelector('[data-target="fcn-meta-field-image-id"]').value="",t.querySelector(".fictioneer-meta-field__image-display").style.backgroundImage="",t.querySelector(".fictioneer-meta-field__image-upload").classList.remove("hidden"),t.querySelector(".fictioneer-meta-field__image-actions").classList.add("hidden")}))})),_$$('[data-target="fcn-meta-field-ebook-upload"], [data-target="fcn-meta-field-ebook-replace"]').forEach((e=>{e.addEventListener("click",fcn_ebookMediaUpload)})),_$$('[data-target="fcn-meta-field-ebook-remove"]').forEach((e=>{e.addEventListener("click",fcn_ebookMediaRemove)})),_$$('[data-target="fcn-meta-field-tokens-add"]').forEach((e=>{e.addEventListener("change",(e=>{e.preventDefault();fcn_tokensToggle(parseInt(e.currentTarget.value),e.currentTarget.closest('[data-target="fcn-meta-field-tokens"]'))}))})),_$$('[data-target="fcn-meta-field-tokens-track"]').forEach((e=>{e.addEventListener("click",(e=>{e.preventDefault();const t=e.target.closest(".fictioneer-meta-field__token"),a=e.target.closest(".fictioneer-meta-field__token-button"),o=e.target.closest(".fictioneer-meta-field");t&&a?fcn_tokensToggle(parseInt(t.dataset.id),t.closest('[data-target="fcn-meta-field-tokens"]')):o&&o.querySelector("select").focus()}))})),_$$(".fictioneer-meta-field__icon-button[data-value]").forEach((e=>{e.addEventListener("click",(e=>{e.preventDefault(),fcn_insertIconClass(e.currentTarget)}))})),_$$(".fictioneer-meta-field__fa-icon").forEach((e=>{e.addEventListener("click",(e=>{const t=e.currentTarget.closest(".fictioneer-meta-field").querySelector(".fictioneer-meta-field__button-grid");t.classList.toggle("hidden",!t.classList.contains("hidden"))}))})),document.addEventListener("DOMContentLoaded",(()=>{wp.data?.dispatch("core/editor").lockPostSaving("requiredValueLock"),fcn_checkRequiredFields(),_$$(".fictioneer-meta-field [required]").forEach((e=>{const t=e.closest(".fictioneer-meta-field");t.classList.add("pending-validation"),e.addEventListener("input",(()=>{fcn_checkRequiredFields()})),e.addEventListener("input",(()=>{t.classList.remove("pending-validation")}),{once:!0})})),wp.data?.subscribe((()=>{_$$(".fictioneer-meta-field [required]").forEach((e=>{e.closest(".fictioneer-meta-field").classList.toggle("fictioneer-meta-field--invalid",""===e?.value.trim())}))}))})),document.addEventListener("DOMContentLoaded",(()=>{_$$('[data-action="select-story"]').forEach((e=>{fcn_setGroupDataList(e),e.addEventListener("change",(e=>{fcn_setGroupDataList(e.currentTarget)}))}))})),_$$(".fictioneer-meta-field--relationships").forEach((e=>{const t=e.querySelector('[data-target="fcn-relationships-info"]');fcn_observeRelationshipSource(e),e.addEventListener("click",(t=>{t.target.closest('[data-action="remove"]')&&fcn_removeRelationship(t.target.closest("[data-id]")),t.target.closest('[data-action="add"]')&&fcn_addRelationship(t.target.closest("[data-id]"),e.querySelector('[data-target="fcn-relationships-values"]'))})),e.addEventListener("mouseover",(e=>{t&&(info=e.target.closest("[data-info]"))&&(t.innerHTML=info.dataset.info)}))})),_$$('[data-target="fcn-relationships-values"]').forEach((e=>{Sortable.create(e,{selectedClass:"is-dragged",ghostClass:"is-dragged-ghost",fallbackTolerance:3,animation:150,onStart:e=>{e.target.closest("ol, ul").classList.add("is-sorting")},onEnd:e=>{setTimeout((()=>{e.target.closest("ol, ul").classList.remove("is-sorting")}),5)}})})),_$$('[data-target="fcn-relationships-search"]').forEach((e=>{e.addEventListener("input",(()=>{clearTimeout(relationshipSearchTimer),relationshipSearchTimer=setTimeout((()=>{const t=e.closest(".fictioneer-meta-field"),a=t.querySelector('[data-target="fcn-relationships-source"]');a.innerHTML="",a.appendChild(_$('[data-target="spinner-template"]').content.cloneNode(!0)),e.value>200&&(e.value=e.value.slice(0,200)),fcn_queryRelationshipPosts({action:t.dataset.ajaxAction,nonce:t.dataset.nonce,key:t.dataset.key,post_id:t.dataset.postId,search:e.value,post_type:t.querySelector('[data-target="fcn-relationships-post-type"]')?.value??"",fcn_fast_ajax:1},a),(infoBox=t.querySelector('[data-target="fcn-relationships-info"]'))&&(infoBox.innerHTML=infoBox.dataset.default)}),800)}))})),_$$('[data-target="fcn-relationships-post-type"]').forEach((e=>{e.addEventListener("change",(e=>{const t=e.currentTarget.closest(".fictioneer-meta-field--relationships"),a=t.querySelector('[data-target="fcn-relationships-source"]');let o=t.querySelector('[data-target="fcn-relationships-search"]')?.value??"";a.innerHTML="",a.appendChild(_$('[data-target="spinner-template"]').content.cloneNode(!0)),o>200&&(o=o.slice(0,200)),fcn_queryRelationshipPosts({action:t.dataset.ajaxAction,nonce:t.dataset.nonce,key:t.dataset.key,post_id:t.dataset.postId,search:o,post_type:e.currentTarget.value,fcn_fast_ajax:1},a),(infoBox=t.querySelector('[data-target="fcn-relationships-info"]'))&&(infoBox.innerHTML=infoBox.dataset.default)}))})),_$$('[data-action="fcn-relationships-scroll"]').forEach((e=>{const t=e.closest(".fictioneer-meta-field").querySelector('[data-target="fcn-relationships-values"');e.addEventListener("click",(e=>{const a=parseInt(e.currentTarget.dataset.direction);t.scrollBy({top:a*t.offsetHeight*.75,behavior:"smooth"})}))})),_$('[data-controller="fcn-unlock-posts"]')?.addEventListener("click",(e=>{fcn_unlockPostsHandleClicks(e.target.closest("[data-target]"))})),_$('[data-target="fcn-unlock-posts-search"]')?.addEventListener("input",(()=>{clearTimeout(fcn_unlockPostsTimer),fcn_unlockPostsTimer=setTimeout((()=>{fcn_unlockPostsSearch()}),800)})),_$('[data-target="fcn-unlock-posts-select"]')?.addEventListener("input",(()=>{clearTimeout(fcn_unlockPostsTimer),fcn_unlockPostsSearch()})),_$(".fictioneer-settings")?.addEventListener("click",(e=>{const t=e.target.closest(".fcn-help");if(!t)return;e.preventDefault();const a=_$$$(t.dataset.fcnDialogTarget);a&&(a.querySelector('[data-target="fcn-help-modal-header"]').textContent=t.dataset.label,a.querySelector('[data-target="fcn-help-modal-content"]').innerHTML=t.dataset.help)}));