Deprecation: #96524 - Deprecate inline JavaScript in Dashboard

See forge#96524

Description

Using inline JavaScript when initializing RequireJS modules in individual dashboard widgets has been deprecated. Widget implementations have to be adjusted accordingly.

Impact

Usages will trigger PHP E_USER_DEPRECATED errors.

Affected Installations

Installations having individual widget implementations which are

  • implementing \TYPO3\CMS\Dashboard\Widgets\RequireJsModuleInterface

  • invoking \TYPO3\CMS\Dashboard\DashboardInitializationService->getRequireJsModules

Migration

Affected widget have to implement \TYPO3\CMS\Dashboard\Widgets\JavaScriptInterface instead of deprecated \TYPO3\CMS\Dashboard\Widgets\RequireJsModuleInterface. Instead of using inline JavaScript for initializing RequireJS modules, \TYPO3\CMS\Core\Page\JavaScriptModuleInstruction have to be declared.

class ExampleChartWidget implements RequireJsModuleInterface
{
    // ...
    public function getJavaScriptModuleInstructions(): array
    {
        return [
            'TYPO3/CMS/Dashboard/ChartInitializer' =>
                'function(ChartInitializer) { ChartInitializer.initialize(); }',
        ];
    }
}

Deprecated example widget above would look like the following when using JavaScriptInterface and JavaScriptModuleInstruction:

class ExampleChartWidget implements JavaScriptInterface
{
    // ...
    public function getJavaScriptModuleInstructions(): array
    {
        return [
            JavaScriptModuleInstruction::forRequireJS(
                'TYPO3/CMS/Dashboard/ChartInitializer'
            )->invoke('initialize'),
        ];
    }
}