]> source.dussan.org Git - nextcloud-server.git/commitdiff
feat: Add dedicated method to load init scripts 40323/head
authorJulius Härtl <jus@bitgrid.net>
Thu, 7 Sep 2023 08:37:14 +0000 (10:37 +0200)
committerJulius Härtl <jus@bitgrid.net>
Thu, 7 Sep 2023 19:42:06 +0000 (21:42 +0200)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Co-authored-by: John Molakvoæ <skjnldsv@protonmail.com>
Update lib/public/Util.php

Co-authored-by: Côme Chilliet <91878298+come-nc@users.noreply.github.com>
Signed-off-by: Julius Härtl <jus@bitgrid.net>
lib/public/Util.php

index bff8038b3dda521a9d8ca85bc1dd0f47a6f0d710..781aa87d66b79f915fb859a0df5c07e996321488 100644 (file)
@@ -49,6 +49,7 @@ namespace OCP;
 use OC\AppScriptDependency;
 use OC\AppScriptSort;
 use bantu\IniGetWrapper\IniGetWrapper;
+use OCP\Share\IManager;
 use Psr\Container\ContainerExceptionInterface;
 
 /**
@@ -57,17 +58,11 @@ use Psr\Container\ContainerExceptionInterface;
  * @since 4.0.0
  */
 class Util {
-       /** @var \OCP\Share\IManager */
-       private static $shareManager;
+       private static ?IManager $shareManager = null;
 
-       /** @var array */
-       private static $scripts = [];
-
-       /** @var array */
-       private static $scriptDeps = [];
-
-       /** @var array */
-       private static $sortedScriptDeps = [];
+       private static array $scriptsInit = [];
+       private static array $scripts = [];
+       private static array $scriptDeps = [];
 
        /**
         * get the current installed version of Nextcloud
@@ -163,6 +158,25 @@ class Util {
                \OC_Util::addStyle($application, $file);
        }
 
+       /**
+        * Add a standalone init js file that is loaded for initialization
+        *
+        * Be careful loading scripts using this method as they are loaded early
+        * and block the initial page rendering. They should not have dependencies
+        * on any other scripts than core-common and core-main.
+        *
+        * @since 28.0.0
+        */
+       public static function addInitScript(string $application, string $file): void {
+               if (!empty($application)) {
+                       $path = "$application/js/$file";
+               } else {
+                       $path = "js/$file";
+               }
+
+               self::$scriptsInit[] = $path;
+       }
+
        /**
         * add a javascript file
         *
@@ -214,7 +228,8 @@ class Util {
                $sortedScripts = $scriptSort->sort(self::$scripts, self::$scriptDeps);
 
                // Flatten array and remove duplicates
-               $sortedScripts = $sortedScripts ? array_merge(...array_values(($sortedScripts))) : [];
+               $sortedScripts = array_merge([self::$scriptsInit], $sortedScripts);
+               $sortedScripts = array_merge(...array_values($sortedScripts));
 
                // Override core-common and core-main order
                if (in_array('core/js/main', $sortedScripts)) {