diff options
-rw-r--r-- | apps/files_sharing/lib/Listener/LoadAdditionalListener.php | 6 | ||||
-rw-r--r-- | apps/files_sharing/lib/Listener/LoadSidebarListener.php | 2 | ||||
-rw-r--r-- | apps/systemtags/lib/AppInfo/Application.php | 3 | ||||
-rw-r--r-- | lib/private/TemplateLayout.php | 4 | ||||
-rw-r--r-- | lib/private/legacy/OC_Util.php | 4 | ||||
-rw-r--r-- | lib/public/Util.php | 82 |
6 files changed, 90 insertions, 11 deletions
diff --git a/apps/files_sharing/lib/Listener/LoadAdditionalListener.php b/apps/files_sharing/lib/Listener/LoadAdditionalListener.php index 44412023bf8..f24dca62a00 100644 --- a/apps/files_sharing/lib/Listener/LoadAdditionalListener.php +++ b/apps/files_sharing/lib/Listener/LoadAdditionalListener.php @@ -37,8 +37,10 @@ class LoadAdditionalListener implements IEventListener { return; } - Util::addScript(Application::APP_ID, 'dist/files_sharing'); - Util::addScript(Application::APP_ID, 'dist/additionalScripts'); + // After files for the files list shared content + Util::addScript(Application::APP_ID, 'dist/files_sharing', 'files'); + // After files for the breadcrumb share indicator + Util::addScript(Application::APP_ID, 'dist/additionalScripts', 'files'); Util::addStyle(Application::APP_ID, 'icons'); } } diff --git a/apps/files_sharing/lib/Listener/LoadSidebarListener.php b/apps/files_sharing/lib/Listener/LoadSidebarListener.php index 145ab25f686..9eac82e6024 100644 --- a/apps/files_sharing/lib/Listener/LoadSidebarListener.php +++ b/apps/files_sharing/lib/Listener/LoadSidebarListener.php @@ -37,6 +37,6 @@ class LoadSidebarListener implements IEventListener { return; } - Util::addScript(Application::APP_ID, 'dist/files_sharing_tab'); + Util::addScript(Application::APP_ID, 'dist/files_sharing_tab', 'files'); } } diff --git a/apps/systemtags/lib/AppInfo/Application.php b/apps/systemtags/lib/AppInfo/Application.php index b6261298f86..5fdd98f3526 100644 --- a/apps/systemtags/lib/AppInfo/Application.php +++ b/apps/systemtags/lib/AppInfo/Application.php @@ -52,8 +52,7 @@ class Application extends App implements IBootstrap { $dispatcher->addListener( 'OCA\Files::loadAdditionalScripts', function () { - // FIXME: no public API for these ? - \OCP\Util::addScript('dist/systemtags'); + \OCP\Util::addScript('core', 'dist/systemtags'); \OCP\Util::addScript(self::APP_ID, 'systemtags'); } ); diff --git a/lib/private/TemplateLayout.php b/lib/private/TemplateLayout.php index 639e7dc007b..317862ff386 100644 --- a/lib/private/TemplateLayout.php +++ b/lib/private/TemplateLayout.php @@ -96,7 +96,7 @@ class TemplateLayout extends \OC_Template { $this->initialState->provideInitialState('core', 'active-app', $this->navigationManager->getActiveEntry()); $this->initialState->provideInitialState('unified-search', 'limit-default', SearchQuery::LIMIT_DEFAULT); - Util::addScript('dist/unified-search', null, true); + Util::addScript('core', 'dist/unified-search', 'core'); // Add navigation entry $this->assign('application', ''); @@ -209,7 +209,7 @@ class TemplateLayout extends \OC_Template { } // Add the js files - $jsFiles = self::findJavascriptFiles(\OC_Util::$scripts); + $jsFiles = self::findJavascriptFiles(array_merge(\OC_Util::$scripts, Util::getScripts())); $this->assign('jsfiles', []); if ($this->config->getSystemValue('installed', false) && $renderAs != TemplateResponse::RENDER_AS_ERROR) { // this is on purpose outside of the if statement below so that the initial state is prefilled (done in the getConfig() call) diff --git a/lib/private/legacy/OC_Util.php b/lib/private/legacy/OC_Util.php index 6239583160b..80114a60b89 100644 --- a/lib/private/legacy/OC_Util.php +++ b/lib/private/legacy/OC_Util.php @@ -580,6 +580,8 @@ class OC_Util { /** * add a javascript file * + * @deprecated 24.0.0 + * * @param string $application application id * @param string|null $file filename * @param bool $prepend prepend the Script to the beginning of the list @@ -611,6 +613,8 @@ class OC_Util { /** * add a translation JS file * + * @deprecated 24.0.0 + * * @param string $application application id * @param string|null $languageCode language code, defaults to the current language * @param bool|null $prepend prepend the Script to the beginning of the list diff --git a/lib/public/Util.php b/lib/public/Util.php index 103b65fe874..f77f8a58370 100644 --- a/lib/public/Util.php +++ b/lib/public/Util.php @@ -72,9 +72,12 @@ class Util { */ public const FATAL = 4; - /** \OCP\Share\IManager */ + /** @var \OCP\Share\IManager */ private static $shareManager; + /** @var array */ + private static $scripts = []; + /** * get the current installed version of Nextcloud * @return array @@ -173,10 +176,73 @@ class Util { * add a javascript file * @param string $application * @param string $file + * @param string $afterAppId * @since 4.0.0 */ - public static function addScript($application, $file = null) { - \OC_Util::addScript($application, $file); + public static function addScript($application, $file = null, $afterAppId = null) { + if (!empty($application)) { + $path = "$application/js/$file"; + } else { + $path = "js/$file"; + } + + // Inject js translations if we load a script for + // a specific app that is not core, as those js files + // need separate handling + if ($application !== 'core' + && $file !== null + && strpos($file, 'l10n') === false) { + self::addTranslations($application); + } + + // manage priorities if defined + // we store the data like this, then flatten everything + // [ + // 'core' => [ + // 'first' => [ + // '/core/js/main.js', + // ], + // 'last' => [ + // '/apps/viewer/js/viewer-main.js', + // ] + // ], + // 'viewer' => [ + // 'first' => [ + // '/apps/viewer/js/viewer-public.js', + // ], + // 'last' => [ + // '/apps/files_pdfviewer/js/files_pdfviewer-main.js', + // ] + // ] + // ] + if (!empty($afterAppId)) { + // init afterAppId app array if it doesn't exists + if (!array_key_exists($afterAppId, self::$scripts)) { + self::$scripts[$afterAppId] = ['first' => [], 'last' => []]; + } + self::$scripts[$afterAppId]['last'][] = $path; + } else { + // init app array if it doesn't exists + if (!array_key_exists($application, self::$scripts)) { + self::$scripts[$application] = ['first' => [], 'last' => []]; + } + self::$scripts[$application]['first'][] = $path; + } + } + + /** + * Return the list of scripts injected to the page + */ + public static function getScripts(): array { + // merging first and last data set + $mapFunc = function (array $scriptsArray): array { + return array_merge(...array_values($scriptsArray)); + }; + $appScripts = array_map($mapFunc, self::$scripts); + // sort core first + $scripts = array_merge(isset($appScripts['core']) ? $appScripts['core'] : [], ...array_values($appScripts)); + // remove duplicates + return array_unique($scripts); } /** @@ -186,7 +252,15 @@ class Util { * @since 8.0.0 */ public static function addTranslations($application, $languageCode = null) { - \OC_Util::addTranslations($application, $languageCode); + if (is_null($languageCode)) { + $languageCode = \OC::$server->getL10NFactory()->findLanguage($application); + } + if (!empty($application)) { + $path = "$application/l10n/$languageCode"; + } else { + $path = "l10n/$languageCode"; + } + self::$scripts[$application]['first'][] = $path; } /** |