diff --git a/Neos.Media.Browser/Resources/Private/Layouts/Default.html b/Neos.Media.Browser/Resources/Private/Layouts/Default.html index bad63b5e40c..63201d802b1 100644 --- a/Neos.Media.Browser/Resources/Private/Layouts/Default.html +++ b/Neos.Media.Browser/Resources/Private/Layouts/Default.html @@ -23,7 +23,7 @@
-
+
diff --git a/Neos.Media.Browser/Resources/Private/Translations/en/Main.xlf b/Neos.Media.Browser/Resources/Private/Translations/en/Main.xlf index 1dd0ef007a1..0070956c26e 100644 --- a/Neos.Media.Browser/Resources/Private/Translations/en/Main.xlf +++ b/Neos.Media.Browser/Resources/Private/Translations/en/Main.xlf @@ -433,6 +433,12 @@ Create missing variants + + Asset is being imported. Please wait. + + + Import still in process. Please wait. + diff --git a/Neos.Media.Browser/Resources/Public/JavaScript/select.js b/Neos.Media.Browser/Resources/Public/JavaScript/select.js index c62e95a1743..5aa77b035f4 100644 --- a/Neos.Media.Browser/Resources/Public/JavaScript/select.js +++ b/Neos.Media.Browser/Resources/Public/JavaScript/select.js @@ -1,32 +1,84 @@ -window.addEventListener('DOMContentLoaded', (event) => { - $(function() { - if (window.parent !== window && window.parent.NeosMediaBrowserCallbacks) { - // we are inside iframe - $('.asset-list').on('click', '[data-asset-identifier]', function(e) { - if ( - $(e.target).closest('a, button').not('[data-asset-identifier]').length === 0 && - window.parent.NeosMediaBrowserCallbacks && - typeof window.parent.NeosMediaBrowserCallbacks.assetChosen === 'function' - ) { - let localAssetIdentifier = $(this).attr('data-local-asset-identifier'); - if (localAssetIdentifier !== '') { - window.parent.NeosMediaBrowserCallbacks.assetChosen(localAssetIdentifier); - } else { - $.post( - $('link[rel="neos-media-browser-service-assetproxies-import"]').attr('href'), - { - assetSourceIdentifier: $(this).attr('data-asset-source-identifier'), - assetIdentifier: $(this).attr('data-asset-identifier'), - __csrfToken: $('body').attr('data-csrf-token') - }, - function(data) { - window.parent.NeosMediaBrowserCallbacks.assetChosen(data.localAssetIdentifier); - } - ); - } - e.preventDefault(); - } - }); - } - }); +window.addEventListener('DOMContentLoaded', () => { + (function () { + const NeosMediaBrowserCallbacks = window.parent.NeosMediaBrowserCallbacks; + const NeosCMS = window.NeosCMS; + + if (window.parent === window || !NeosCMS || !NeosMediaBrowserCallbacks || typeof NeosMediaBrowserCallbacks.assetChosen !== 'function') { + return; + } + + function importAsset(asset) { + const params = new URLSearchParams(); + params.append('assetSourceIdentifier', asset.dataset.assetSourceIdentifier); + params.append('assetIdentifier', asset.dataset.assetIdentifier); + params.append('__csrfToken', document.querySelector('body').dataset.csrfToken); + + fetch( + document + .querySelector('link[rel="neos-media-browser-service-assetproxies-import"]') + .getAttribute('href'), + { + headers: { + 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', + }, + method: 'POST', + credentials: 'include', + body: params.toString(), + } + ) + .then((response) => { + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + return response.json(); + }) + .then((data) => { + NeosMediaBrowserCallbacks.assetChosen(data.localAssetIdentifier); + asset.removeAttribute('data-import-in-process'); + }) + .catch((error) => { + NeosCMS.Notification.error(NeosCMS.I18n.translate( + 'assetImport.importError', + 'Asset could not be imported. Please try again.', + 'Neos.Media.Browser' + ), error); + console.error('Error:', error); + }) + } + + const assets = document.querySelectorAll('[data-asset-identifier]'); + assets.forEach((asset) => { + asset.addEventListener('click', (e) => { + const assetLink = e.target.closest('a[data-asset-identifier], button[data-asset-identifier]'); + if (!assetLink) { + return; + } + + const localAssetIdentifier = asset.dataset.localAssetIdentifier; + if (localAssetIdentifier !== '' && !NeosCMS.isNil(localAssetIdentifier)) { + NeosMediaBrowserCallbacks.assetChosen(localAssetIdentifier); + } else { + if (asset.dataset.importInProcess !== 'true') { + asset.dataset.importInProcess = 'true'; + const message = NeosCMS.I18n.translate( + 'assetImport.importInfo', + 'Asset is being imported. Please wait.', + 'Neos.Media.Browser' + ); + NeosCMS.Notification.ok(message); + + importAsset(asset); + } else { + const message = NeosCMS.I18n.translate( + 'assetImport.importInProcess', + 'Import still in process. Please wait.', + 'Neos.Media.Browser' + ); + NeosCMS.Notification.warning(message); + } + } + e.preventDefault(); + }); + }); + })(); }); diff --git a/Neos.Neos/Resources/Public/JavaScript/Services/Configuration.js b/Neos.Neos/Resources/Public/JavaScript/Services/Configuration.js index d88f71c982d..287bffb0001 100644 --- a/Neos.Neos/Resources/Public/JavaScript/Services/Configuration.js +++ b/Neos.Neos/Resources/Public/JavaScript/Services/Configuration.js @@ -1,6 +1,6 @@ import { getCollectionValueByPath, isNil } from "../Helper"; -const hasConfiguration = !isNil(window.NeosCMS?.Configuration); +let hasConfiguration = !isNil(window.NeosCMS?.Configuration); const init = () => { if (isNil(window.NeosCMS)) { @@ -9,6 +9,7 @@ const init = () => { if (isNil(window.NeosCMS.Configuration)) { window.NeosCMS.Configuration = {}; + hasConfiguration = true; } // append xliff uri