diff --git a/com.woltlab.wcf/templates/articleAdd.tpl b/com.woltlab.wcf/templates/articleAdd.tpl index aa5b44b8d83..c837487e84f 100644 --- a/com.woltlab.wcf/templates/articleAdd.tpl +++ b/com.woltlab.wcf/templates/articleAdd.tpl @@ -1,13 +1,7 @@ {capture assign='__contentHeader'}
-

- {if $articleIsFrontend|empty} - {if $action == 'add'}{lang}wcf.acp.article.add{/lang}{else}{lang}wcf.acp.article.edit{/lang}{/if} - {else} - {$__wcf->getActivePage()->getTitle()} - {/if} -

+

{$__wcf->getActivePage()->getTitle()}

{hascontent} @@ -25,48 +19,7 @@
{/capture} -{capture assign='contentInteractionButtons'} - {if $action == 'edit'} - {if $article->canDelete()} - - - - {/if} - {if $languages|count > 1 || $article->isMultilingual} - - {/if} - {/if} -{/capture} - -{if $articleIsFrontend|empty} - {include file='header' pageTitle='wcf.acp.article.'|concat:$action} -{else} - {include file='header' contentHeader=$__contentHeader} -{/if} +{include file='header' contentHeader=$__contentHeader} {if $__wcf->session->getPermission('admin.content.article.canManageArticle')} @@ -131,10 +65,6 @@ {/if} -{if $articleIsFrontend|empty} - {unsafe:$__contentHeader} -{/if} - {include file='shared_formNotice'} {if $action == 'edit'} diff --git a/ts/WoltLabSuite/Core/Acp/Ui/Article/InlineEditor.ts b/ts/WoltLabSuite/Core/Acp/Ui/Article/InlineEditor.ts index fd72804fe32..36c65a280d9 100644 --- a/ts/WoltLabSuite/Core/Acp/Ui/Article/InlineEditor.ts +++ b/ts/WoltLabSuite/Core/Acp/Ui/Article/InlineEditor.ts @@ -4,6 +4,7 @@ * @author Alexander Ebert * @copyright 2001-2019 WoltLab GmbH * @license GNU Lesser General Public License + * @deprecated 6.2 No longer in use. */ import { showDefaultSuccessSnackbar } from "WoltLabSuite/Core/Component/Snackbar"; diff --git a/ts/WoltLabSuite/Core/Component/Interaction/FormBuilderDialog.ts b/ts/WoltLabSuite/Core/Component/Interaction/FormBuilderDialog.ts index 3da4b225c5a..c48f6e2b811 100644 --- a/ts/WoltLabSuite/Core/Component/Interaction/FormBuilderDialog.ts +++ b/ts/WoltLabSuite/Core/Component/Interaction/FormBuilderDialog.ts @@ -9,27 +9,65 @@ import { dialogFactory } from "WoltLabSuite/Core/Component/Dialog"; import { showDefaultSuccessSnackbar } from "WoltLabSuite/Core/Component/Snackbar"; +import { InteractionEffect } from "./InteractionEffect"; -async function handleFormBuilderDialogAction(element: HTMLElement, endpoint: string): Promise { +type Payload = Record; + +async function handleFormBuilderDialogAction( + container: HTMLElement, + element: HTMLElement, + endpoint: string, + interactionEffect: InteractionEffect = InteractionEffect.ReloadItem, + detail: Payload, +): Promise { const { ok } = await dialogFactory().usingFormBuilder().fromEndpoint(endpoint); if (!ok) { return; } - element.dispatchEvent( - new CustomEvent("interaction:invalidate", { - bubbles: true, - }), - ); + if (interactionEffect === InteractionEffect.ReloadItem || interactionEffect === InteractionEffect.ReloadPage) { + element.dispatchEvent( + new CustomEvent("interaction:invalidate", { + bubbles: true, + detail: { + ...detail, + _reloadPage: String(interactionEffect === InteractionEffect.ReloadPage), + }, + }), + ); + } else if (interactionEffect === InteractionEffect.ReloadList) { + container.dispatchEvent( + new CustomEvent("interaction:invalidate-all", { + detail: { + ...detail, + }, + }), + ); + } else { + element.dispatchEvent( + new CustomEvent("interaction:remove", { + bubbles: true, + detail: { + ...detail, + }, + }), + ); + } showDefaultSuccessSnackbar(); } export function setup(identifier: string, container: HTMLElement): void { - container.addEventListener("interaction:execute", (event: CustomEvent) => { + container.addEventListener("interaction:execute", (event: CustomEvent) => { if (event.detail.interaction === identifier) { - void handleFormBuilderDialogAction(event.target as HTMLElement, event.detail.endpoint); + void handleFormBuilderDialogAction( + container, + event.target as HTMLElement, + event.detail.endpoint, + event.detail.interactionEffect as InteractionEffect, + event.detail, + ); } }); } diff --git a/ts/WoltLabSuite/Core/Component/Interaction/InteractionEffect.ts b/ts/WoltLabSuite/Core/Component/Interaction/InteractionEffect.ts index c348a0afca6..cd4d65d9835 100644 --- a/ts/WoltLabSuite/Core/Component/Interaction/InteractionEffect.ts +++ b/ts/WoltLabSuite/Core/Component/Interaction/InteractionEffect.ts @@ -10,5 +10,6 @@ export enum InteractionEffect { ReloadItem = "ReloadItem", ReloadList = "ReloadList", + ReloadPage = "ReloadPage", RemoveItem = "RemoveItem", } diff --git a/ts/WoltLabSuite/Core/Component/Interaction/LegacyDboAction.ts b/ts/WoltLabSuite/Core/Component/Interaction/LegacyDboAction.ts index a292f96388d..0ce1c49ed42 100644 --- a/ts/WoltLabSuite/Core/Component/Interaction/LegacyDboAction.ts +++ b/ts/WoltLabSuite/Core/Component/Interaction/LegacyDboAction.ts @@ -14,6 +14,8 @@ import { showDefaultSuccessSnackbar, showSuccessSnackbar } from "WoltLabSuite/Co import { getPhrase } from "WoltLabSuite/Core/Language"; import { InteractionEffect } from "./InteractionEffect"; +type Payload = Record; + async function handleDboAction( container: HTMLElement, element: HTMLElement, @@ -23,6 +25,7 @@ async function handleDboAction( confirmationType: ConfirmationType, customConfirmationMessage: string = "", interactionEffect: InteractionEffect = InteractionEffect.ReloadItem, + detail: Payload, ): Promise { const confirmationResult = await handleConfirmation(objectName, confirmationType, customConfirmationMessage); if (!confirmationResult.result) { @@ -34,18 +37,27 @@ async function handleDboAction( .payload(confirmationResult.reason ? { reason: confirmationResult.reason } : {}) .dispatch(); - if (interactionEffect === InteractionEffect.ReloadItem) { + if (interactionEffect === InteractionEffect.ReloadItem || interactionEffect === InteractionEffect.ReloadPage) { element.dispatchEvent( - new CustomEvent("interaction:invalidate", { + new CustomEvent("interaction:invalidate", { bubbles: true, + detail: { + ...detail, + _reloadPage: String(interactionEffect === InteractionEffect.ReloadPage), + }, }), ); } else if (interactionEffect === InteractionEffect.ReloadList) { - container.dispatchEvent(new CustomEvent("interaction:invalidate-all")); + container.dispatchEvent( + new CustomEvent("interaction:invalidate-all", { + detail, + }), + ); } else { element.dispatchEvent( - new CustomEvent("interaction:remove", { + new CustomEvent("interaction:remove", { bubbles: true, + detail, }), ); } @@ -58,7 +70,7 @@ async function handleDboAction( } export function setup(identifier: string, container: HTMLElement): void { - container.addEventListener("interaction:execute", (event: CustomEvent) => { + container.addEventListener("interaction:execute", (event: CustomEvent) => { if (event.detail.interaction === identifier) { void handleDboAction( container, @@ -66,9 +78,10 @@ export function setup(identifier: string, container: HTMLElement): void { event.detail.objectName, event.detail.className, event.detail.actionName, - event.detail.confirmationType, + event.detail.confirmationType as ConfirmationType, event.detail.confirmationMessage, - event.detail.interactionEffect, + event.detail.interactionEffect as InteractionEffect, + event.detail, ); } }); diff --git a/ts/WoltLabSuite/Core/Component/Interaction/Rpc.ts b/ts/WoltLabSuite/Core/Component/Interaction/Rpc.ts index 143bdf0a47f..6bf2b4d8ca2 100644 --- a/ts/WoltLabSuite/Core/Component/Interaction/Rpc.ts +++ b/ts/WoltLabSuite/Core/Component/Interaction/Rpc.ts @@ -14,6 +14,8 @@ import { showDefaultSuccessSnackbar, showSuccessSnackbar } from "WoltLabSuite/Co import { getPhrase } from "WoltLabSuite/Core/Language"; import { InteractionEffect } from "./InteractionEffect"; +type Payload = Record; + async function handleRpcInteraction( container: HTMLElement, element: HTMLElement, @@ -22,6 +24,7 @@ async function handleRpcInteraction( confirmationType: ConfirmationType, customConfirmationMessage: string = "", interactionEffect: InteractionEffect = InteractionEffect.ReloadItem, + detail: Payload, ): Promise { const confirmationResult = await handleConfirmation(objectName, confirmationType, customConfirmationMessage); if (!confirmationResult.result) { @@ -43,18 +46,23 @@ async function handleRpcInteraction( } } - if (interactionEffect === InteractionEffect.ReloadItem) { + if (interactionEffect === InteractionEffect.ReloadItem || interactionEffect === InteractionEffect.ReloadPage) { element.dispatchEvent( - new CustomEvent("interaction:invalidate", { + new CustomEvent("interaction:invalidate", { bubbles: true, + detail: { + ...detail, + _reloadPage: String(interactionEffect === InteractionEffect.ReloadPage), + }, }), ); } else if (interactionEffect === InteractionEffect.ReloadList) { - container.dispatchEvent(new CustomEvent("interaction:invalidate-all")); + container.dispatchEvent(new CustomEvent("interaction:invalidate-all", { detail })); } else { element.dispatchEvent( - new CustomEvent("interaction:remove", { + new CustomEvent("interaction:remove", { bubbles: true, + detail, }), ); } @@ -67,16 +75,17 @@ async function handleRpcInteraction( } export function setup(identifier: string, container: HTMLElement): void { - container.addEventListener("interaction:execute", (event: CustomEvent) => { + container.addEventListener("interaction:execute", (event: CustomEvent) => { if (event.detail.interaction === identifier) { void handleRpcInteraction( container, event.target as HTMLElement, event.detail.objectName, event.detail.endpoint, - event.detail.confirmationType, + event.detail.confirmationType as ConfirmationType, event.detail.confirmationMessage, - event.detail.interactionEffect, + event.detail.interactionEffect as InteractionEffect, + event.detail, ); } }); diff --git a/ts/WoltLabSuite/Core/Component/Interaction/StandaloneButton.ts b/ts/WoltLabSuite/Core/Component/Interaction/StandaloneButton.ts index cb31669f76c..3a7e773bc07 100644 --- a/ts/WoltLabSuite/Core/Component/Interaction/StandaloneButton.ts +++ b/ts/WoltLabSuite/Core/Component/Interaction/StandaloneButton.ts @@ -15,6 +15,8 @@ interface HeaderContent { template: string; } +type Payload = Record; + export class StandaloneButton { #container: HTMLElement; #providerClassName: string; @@ -100,9 +102,15 @@ export class StandaloneButton { } #initEventListeners(): void { - this.#container.addEventListener("interaction:invalidate", () => { - void this.#refreshContextMenu(); - void this.#refreshHeader(); + this.#container.addEventListener("interaction:invalidate", (event: CustomEvent) => { + if (event.detail._reloadPage === "true") { + setTimeout(() => { + window.location.reload(); + }, 2000); + } else { + void this.#refreshContextMenu(); + void this.#refreshHeader(); + } }); this.#container.addEventListener("interaction:invalidate-all", () => { @@ -111,7 +119,9 @@ export class StandaloneButton { }); this.#container.addEventListener("interaction:remove", () => { - window.location.href = this.#redirectUrl; + setTimeout(() => { + window.location.href = this.#redirectUrl; + }, 2000); }); } } diff --git a/wcfsetup/install/files/acp/templates/adAdd.tpl b/wcfsetup/install/files/acp/templates/adAdd.tpl index 1a574bded63..5e134fbfd65 100644 --- a/wcfsetup/install/files/acp/templates/adAdd.tpl +++ b/wcfsetup/install/files/acp/templates/adAdd.tpl @@ -15,8 +15,11 @@ diff --git a/wcfsetup/install/files/acp/templates/articleAdd.tpl b/wcfsetup/install/files/acp/templates/articleAdd.tpl index 398f9dc60bf..5ac705bb0db 100644 --- a/wcfsetup/install/files/acp/templates/articleAdd.tpl +++ b/wcfsetup/install/files/acp/templates/articleAdd.tpl @@ -1,73 +1,22 @@ -{capture assign='__contentHeader'} -
-
-

- {if $articleIsFrontend|empty} - {if $action == 'add'}{lang}wcf.acp.article.add{/lang}{else}{lang}wcf.acp.article.edit{/lang}{/if} - {else} - {$__wcf->getActivePage()->getTitle()} - {/if} -

-
- - -
-{/capture} +{include file='header' pageTitle='wcf.acp.article.'|concat:$action} -{if $articleIsFrontend|empty} - {include file='header' pageTitle='wcf.acp.article.'|concat:$action} -{else} - {include file='header' contentHeader=$__contentHeader} -{/if} +
+
+

{if $action == 'add'}{lang}wcf.acp.article.add{/lang}{else}{lang}wcf.acp.article.edit{/lang}{/if}

+
+ + +
{if $__wcf->session->getPermission('admin.content.article.canManageArticle')} @@ -123,7 +53,7 @@ {/if} -{if $articleIsFrontend|empty} - {unsafe:$__contentHeader} -{/if} - {include file='shared_formNotice'} {if $action == 'edit'} @@ -654,5 +580,4 @@ }); - {include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/bbcodeMediaProviderAdd.tpl b/wcfsetup/install/files/acp/templates/bbcodeMediaProviderAdd.tpl index ba45d0a21bf..6fea5075a0d 100644 --- a/wcfsetup/install/files/acp/templates/bbcodeMediaProviderAdd.tpl +++ b/wcfsetup/install/files/acp/templates/bbcodeMediaProviderAdd.tpl @@ -4,11 +4,14 @@

{lang}wcf.acp.bbcode.mediaProvider.{$action}{/lang}

- + diff --git a/wcfsetup/install/files/acp/templates/captchaQuestionAdd.tpl b/wcfsetup/install/files/acp/templates/captchaQuestionAdd.tpl index 636ce79406a..974d4458d50 100644 --- a/wcfsetup/install/files/acp/templates/captchaQuestionAdd.tpl +++ b/wcfsetup/install/files/acp/templates/captchaQuestionAdd.tpl @@ -7,8 +7,11 @@ diff --git a/wcfsetup/install/files/acp/templates/contactOptionAdd.tpl b/wcfsetup/install/files/acp/templates/contactOptionAdd.tpl index 93bce9c949d..a91fd0f37a3 100644 --- a/wcfsetup/install/files/acp/templates/contactOptionAdd.tpl +++ b/wcfsetup/install/files/acp/templates/contactOptionAdd.tpl @@ -9,8 +9,11 @@ diff --git a/wcfsetup/install/files/acp/templates/contactRecipientAdd.tpl b/wcfsetup/install/files/acp/templates/contactRecipientAdd.tpl index 6d0b6944488..f67e8f44c7b 100644 --- a/wcfsetup/install/files/acp/templates/contactRecipientAdd.tpl +++ b/wcfsetup/install/files/acp/templates/contactRecipientAdd.tpl @@ -7,8 +7,11 @@ diff --git a/wcfsetup/install/files/acp/templates/cronjobAdd.tpl b/wcfsetup/install/files/acp/templates/cronjobAdd.tpl index 998e4e987d0..21078aa4d44 100644 --- a/wcfsetup/install/files/acp/templates/cronjobAdd.tpl +++ b/wcfsetup/install/files/acp/templates/cronjobAdd.tpl @@ -7,8 +7,11 @@ diff --git a/wcfsetup/install/files/acp/templates/labelAdd.tpl b/wcfsetup/install/files/acp/templates/labelAdd.tpl index 3a02376cacc..343dcab7e15 100644 --- a/wcfsetup/install/files/acp/templates/labelAdd.tpl +++ b/wcfsetup/install/files/acp/templates/labelAdd.tpl @@ -7,8 +7,11 @@ diff --git a/wcfsetup/install/files/acp/templates/labelGroupAdd.tpl b/wcfsetup/install/files/acp/templates/labelGroupAdd.tpl index b9cc95db40e..93b4356d59a 100644 --- a/wcfsetup/install/files/acp/templates/labelGroupAdd.tpl +++ b/wcfsetup/install/files/acp/templates/labelGroupAdd.tpl @@ -24,9 +24,10 @@ diff --git a/wcfsetup/install/files/acp/templates/languageAdd.tpl b/wcfsetup/install/files/acp/templates/languageAdd.tpl index 3fc6a658f3e..a8bb28e34a7 100644 --- a/wcfsetup/install/files/acp/templates/languageAdd.tpl +++ b/wcfsetup/install/files/acp/templates/languageAdd.tpl @@ -7,8 +7,11 @@ diff --git a/wcfsetup/install/files/acp/templates/menuAdd.tpl b/wcfsetup/install/files/acp/templates/menuAdd.tpl index c64392465bc..fd8fade00c5 100644 --- a/wcfsetup/install/files/acp/templates/menuAdd.tpl +++ b/wcfsetup/install/files/acp/templates/menuAdd.tpl @@ -8,10 +8,10 @@ diff --git a/wcfsetup/install/files/acp/templates/noticeAdd.tpl b/wcfsetup/install/files/acp/templates/noticeAdd.tpl index 43383e3cd8c..2df7895077e 100644 --- a/wcfsetup/install/files/acp/templates/noticeAdd.tpl +++ b/wcfsetup/install/files/acp/templates/noticeAdd.tpl @@ -7,8 +7,11 @@ diff --git a/wcfsetup/install/files/acp/templates/package.tpl b/wcfsetup/install/files/acp/templates/package.tpl index 9336b6cfa80..40402e7a1c8 100644 --- a/wcfsetup/install/files/acp/templates/package.tpl +++ b/wcfsetup/install/files/acp/templates/package.tpl @@ -15,21 +15,14 @@

{$package->getName()}

- {hascontent} - - {/hascontent} +
diff --git a/wcfsetup/install/files/acp/templates/packageUpdateServerAdd.tpl b/wcfsetup/install/files/acp/templates/packageUpdateServerAdd.tpl index e4295676761..0c20bc9bcd3 100644 --- a/wcfsetup/install/files/acp/templates/packageUpdateServerAdd.tpl +++ b/wcfsetup/install/files/acp/templates/packageUpdateServerAdd.tpl @@ -7,8 +7,11 @@ diff --git a/wcfsetup/install/files/acp/templates/pageAdd.tpl b/wcfsetup/install/files/acp/templates/pageAdd.tpl index a2b698e8991..f54df0044ed 100644 --- a/wcfsetup/install/files/acp/templates/pageAdd.tpl +++ b/wcfsetup/install/files/acp/templates/pageAdd.tpl @@ -54,14 +54,11 @@
  • {icon name='copy'} {lang}wcf.acp.page.button.copyPage{/lang}
  • {/if} - {if !$page->requireObjectID} -
  • {icon name='magnifying-glass'} {lang}wcf.acp.page.button.viewPage{/lang}
  • - {/if} - -
  • {icon name='arrow-down-short-wide'} {lang}wcf.acp.page.button.boxOrder{/lang}
  • +
  • + {unsafe:$interactionContextMenu->render()} +
  • {/if} -
  • {icon name='list'} {lang}wcf.acp.menu.link.cms.page.list{/lang}
  • - + {event name='contentHeaderNavigation'} diff --git a/wcfsetup/install/files/acp/templates/paidSubscriptionAdd.tpl b/wcfsetup/install/files/acp/templates/paidSubscriptionAdd.tpl index b62ae984a2d..9c54882eee9 100644 --- a/wcfsetup/install/files/acp/templates/paidSubscriptionAdd.tpl +++ b/wcfsetup/install/files/acp/templates/paidSubscriptionAdd.tpl @@ -31,8 +31,11 @@ diff --git a/wcfsetup/install/files/acp/templates/reactionTypeAdd.tpl b/wcfsetup/install/files/acp/templates/reactionTypeAdd.tpl index b92f6595fcb..7b9110bf253 100644 --- a/wcfsetup/install/files/acp/templates/reactionTypeAdd.tpl +++ b/wcfsetup/install/files/acp/templates/reactionTypeAdd.tpl @@ -7,8 +7,11 @@ diff --git a/wcfsetup/install/files/acp/templates/smileyAdd.tpl b/wcfsetup/install/files/acp/templates/smileyAdd.tpl index 0a74755582d..89014882118 100644 --- a/wcfsetup/install/files/acp/templates/smileyAdd.tpl +++ b/wcfsetup/install/files/acp/templates/smileyAdd.tpl @@ -7,8 +7,11 @@ diff --git a/wcfsetup/install/files/acp/templates/tagAdd.tpl b/wcfsetup/install/files/acp/templates/tagAdd.tpl index c8686d132c7..8af33f3cd21 100644 --- a/wcfsetup/install/files/acp/templates/tagAdd.tpl +++ b/wcfsetup/install/files/acp/templates/tagAdd.tpl @@ -7,8 +7,11 @@ diff --git a/wcfsetup/install/files/acp/templates/templateAdd.tpl b/wcfsetup/install/files/acp/templates/templateAdd.tpl index 6a2f3a84cd4..9f39e2a8253 100644 --- a/wcfsetup/install/files/acp/templates/templateAdd.tpl +++ b/wcfsetup/install/files/acp/templates/templateAdd.tpl @@ -8,8 +8,11 @@