From 4b54ba6219f0849fc54ebfc5ecdb5e72fb2e3590 Mon Sep 17 00:00:00 2001
From: Andreas Nedbal <andy@pixelde.su>
Date: Tue, 5 Mar 2024 09:51:52 +0100
Subject: [PATCH] [TASK] Remove jQuery from
 @typo3/backend/viewport/content-container

Resolves: #103279
Releases: main
Change-Id: I27d5ec131ded8d2e52104590419ad70af2ab8011
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/83207
Tested-by: Andreas Nedbal <andy@pixelde.su>
Tested-by: core-ci <typo3@b13.com>
Tested-by: Benni Mack <benni@typo3.org>
Reviewed-by: Andreas Nedbal <andy@pixelde.su>
Reviewed-by: Andreas Kienast <a.fernandez@scripting-base.de>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Andreas Kienast <a.fernandez@scripting-base.de>
---
 .../TypeScript/backend/viewport/content-container.ts  | 11 +++--------
 .../Public/JavaScript/viewport/content-container.js   |  2 +-
 2 files changed, 4 insertions(+), 9 deletions(-)

diff --git a/Build/Sources/TypeScript/backend/viewport/content-container.ts b/Build/Sources/TypeScript/backend/viewport/content-container.ts
index d67a6a6b8538..12839a52882d 100644
--- a/Build/Sources/TypeScript/backend/viewport/content-container.ts
+++ b/Build/Sources/TypeScript/backend/viewport/content-container.ts
@@ -13,7 +13,6 @@
 
 import { ScaffoldIdentifierEnum } from '../enum/viewport/scaffold-identifier';
 import { AbstractContainer } from './abstract-container';
-import $ from 'jquery';
 import ClientRequest from '../event/client-request';
 import InteractionRequest from '../event/interaction-request';
 import Loader from './loader';
@@ -21,7 +20,7 @@ import TriggerRequest from '../event/trigger-request';
 
 class ContentContainer extends AbstractContainer {
   public get(): Window {
-    return (<HTMLIFrameElement>$(ScaffoldIdentifierEnum.contentModuleIframe)[0]).contentWindow;
+    return (document.querySelector(ScaffoldIdentifierEnum.contentModuleIframe) as HTMLIFrameElement).contentWindow;
   }
 
   public beforeSetUrl(interactionRequest: InteractionRequest): Promise<void> {
@@ -81,12 +80,8 @@ class ContentContainer extends AbstractContainer {
     return 0;
   }
 
-  private resolveIFrameElement(): HTMLElement {
-    const $iFrame = $(ScaffoldIdentifierEnum.contentModuleIframe + ':first');
-    if ($iFrame.length === 0) {
-      return null;
-    }
-    return $iFrame.get(0);
+  private resolveIFrameElement(): HTMLElement|null {
+    return document.querySelector(ScaffoldIdentifierEnum.contentModuleIframe);
   }
 
   private resolveRouterElement(): HTMLElement {
diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/viewport/content-container.js b/typo3/sysext/backend/Resources/Public/JavaScript/viewport/content-container.js
index a38660b37492..4c1d1d71fe37 100644
--- a/typo3/sysext/backend/Resources/Public/JavaScript/viewport/content-container.js
+++ b/typo3/sysext/backend/Resources/Public/JavaScript/viewport/content-container.js
@@ -10,4 +10,4 @@
  *
  * The TYPO3 project - inspiring people to share!
  */
-import{ScaffoldIdentifierEnum}from"@typo3/backend/enum/viewport/scaffold-identifier.js";import{AbstractContainer}from"@typo3/backend/viewport/abstract-container.js";import $ from"jquery";import ClientRequest from"@typo3/backend/event/client-request.js";import InteractionRequest from"@typo3/backend/event/interaction-request.js";import Loader from"@typo3/backend/viewport/loader.js";import TriggerRequest from"@typo3/backend/event/trigger-request.js";class ContentContainer extends AbstractContainer{get(){return $(ScaffoldIdentifierEnum.contentModuleIframe)[0].contentWindow}beforeSetUrl(e){return this.consumerScope.invoke(new TriggerRequest("typo3.beforeSetUrl",e))}setUrl(e,t,r){const n=this.resolveRouterElement();if(null===n)return Promise.reject();t instanceof InteractionRequest||(t=new ClientRequest("typo3.setUrl",null));const o=this.consumerScope.invoke(new TriggerRequest("typo3.setUrl",t));return o.then((()=>{Loader.start(),n.setAttribute("endpoint",e),n.setAttribute("module",r||null),n.parentElement.addEventListener("typo3-module-loaded",(()=>Loader.finish()),{once:!0})})),o}getUrl(){return this.resolveRouterElement().getAttribute("endpoint")}refresh(e){const t=this.resolveIFrameElement();if(null===t)return Promise.reject();const r=this.consumerScope.invoke(new TriggerRequest("typo3.refresh",e));return r.then((()=>{t.contentWindow.location.reload()})),r}getIdFromUrl(){if(this.getUrl()){const e=new URL(this.getUrl(),window.location.origin).searchParams.get("id")??"";return parseInt(e,10)}return 0}resolveIFrameElement(){const e=$(ScaffoldIdentifierEnum.contentModuleIframe+":first");return 0===e.length?null:e.get(0)}resolveRouterElement(){return document.querySelector(ScaffoldIdentifierEnum.contentModuleRouter)}}export default ContentContainer;
\ No newline at end of file
+import{ScaffoldIdentifierEnum}from"@typo3/backend/enum/viewport/scaffold-identifier.js";import{AbstractContainer}from"@typo3/backend/viewport/abstract-container.js";import ClientRequest from"@typo3/backend/event/client-request.js";import InteractionRequest from"@typo3/backend/event/interaction-request.js";import Loader from"@typo3/backend/viewport/loader.js";import TriggerRequest from"@typo3/backend/event/trigger-request.js";class ContentContainer extends AbstractContainer{get(){return document.querySelector(ScaffoldIdentifierEnum.contentModuleIframe).contentWindow}beforeSetUrl(e){return this.consumerScope.invoke(new TriggerRequest("typo3.beforeSetUrl",e))}setUrl(e,t,r){const n=this.resolveRouterElement();if(null===n)return Promise.reject();t instanceof InteractionRequest||(t=new ClientRequest("typo3.setUrl",null));const o=this.consumerScope.invoke(new TriggerRequest("typo3.setUrl",t));return o.then((()=>{Loader.start(),n.setAttribute("endpoint",e),n.setAttribute("module",r||null),n.parentElement.addEventListener("typo3-module-loaded",(()=>Loader.finish()),{once:!0})})),o}getUrl(){return this.resolveRouterElement().getAttribute("endpoint")}refresh(e){const t=this.resolveIFrameElement();if(null===t)return Promise.reject();const r=this.consumerScope.invoke(new TriggerRequest("typo3.refresh",e));return r.then((()=>{t.contentWindow.location.reload()})),r}getIdFromUrl(){if(this.getUrl()){const e=new URL(this.getUrl(),window.location.origin).searchParams.get("id")??"";return parseInt(e,10)}return 0}resolveIFrameElement(){return document.querySelector(ScaffoldIdentifierEnum.contentModuleIframe)}resolveRouterElement(){return document.querySelector(ScaffoldIdentifierEnum.contentModuleRouter)}}export default ContentContainer;
\ No newline at end of file
-- 
GitLab