<script> function copyTheme() { const appClasses = [...document.getElementById('app').classList]; const appTheme = appClasses.find((c) => c.startsWith('theme--')); for (const element of document.getElementsByClassName('theme--copy')) { element.classList.replace('theme--copy', appTheme); } } function setupForm() { const button = document.getElementById('top-button'); const input = document.getElementById('top-input'); const spinner = document.getElementById('top-spinner'); const errorBox = document.getElementById('top-error'); const errorContent = document.getElementById('top-error-content'); input.oninput = () => { if (input.value === '') { button.classList.add('v-btn--disabled'); button.disabled = true; } else { button.classList.remove('v-btn--disabled'); button.disabled = false; } }; button.onclick = async () => { button.classList.add('v-btn--disabled'); button.disabled = true; input.disabled = true; spinner.style = ''; errorBox.style = 'display: none;'; try { await createNewTop(input.value); } catch (error) { errorBox.style = ''; errorContent.textContent = error.message; } button.classList.remove('v-btn--disabled'); button.disabled = false; input.disabled = false; spinner.style = 'display: none;'; }; } async function getNextTopNumber() { const result = await graphql( 'query { pages { list(tags: ["top"]) { path } } }' ); const topNumbers = result.data.pages.list .map((page) => page.path) .map((path) => path.split('/')) .map((pathSegments) => pathSegments[pathSegments.length - 1]) .map((lastSegment) => Number(lastSegment)) .filter((topNumber) => !!topNumber); return Math.max(...topNumbers) + 1; } async function insertNextTopNumbers() { const nextTopNumber = await getNextTopNumber(); for (const element of document.getElementsByClassName('next-top-number')) { element.textContent = nextTopNumber; } } async function createNewTop(title) { const nextTopNumber = await getNextTopNumber(); const templateResult = await graphql(` query { pages { single(id: 477) { content description editor isPublished isPrivate locale tags { tag } title } } } `); if (templateResult.errors && templateResult.errors.length !== 0) { throw new Error(templateResult.errors[0].message); } const template = templateResult.data.pages.single; template.tags = template.tags.map((tag) => tag.tag); template.path = `verein/topictreff/top/${nextTopNumber}`; template.title = `TOP ${nextTopNumber} - ${title}`; const pageData = Object.entries(template) .map(([key, value]) => `${key}: ${JSON.stringify(value)}`) .map((data) => { console.log(data); return data; }) .join(', '); const result = await graphql(` mutation { pages { create(${pageData}) { responseResult { succeeded errorCode message } } } } `); const response = result.data.pages.create.responseResult; if (response.succeeded) { window.location = '/e/' + template.path; } else { throw new Error(response.message); console.log({ response }); } } isElementLoaded('.contents').then(() => { copyTheme(); setupForm(); insertNextTopNumbers(); }); </script>