Compare commits

..

No commits in common. "develop" and "develop" have entirely different histories.

28 changed files with 280 additions and 8720 deletions

4
.gitignore vendored
View file

@ -2,4 +2,8 @@
/node_modules /node_modules
/l10n/* /l10n/*
/releases /releases
/package-lock.json
!/l10n/.gitkeep !/l10n/.gitkeep
/yarn*.log
/src/admin.js.bk
/templates/settings/admin-form.php.bk

View file

@ -1,49 +1,5 @@
## [Unreleased] ## [Unreleased]
## 5.2.2
### Fixed
* fix #464: add Intl.Segmenter polyfill
### Added
* add new translations
## 5.2.1
### Added
* chore: set side_menu as package name
### Fixed
* fix(LangRepository): check orm capabilities to query entities
* fix(admin/\*SaveButton): cast settings to string
## 5.2.0
### Added
* add compatibility with NC33
### Fixed
* fix #468: force nextcloud logo display css rule (opener-only)
## 5.1.3
### Fixed
* fix #445: fix build by adding package-lock.json
## 5.1.2
### Added
* add new translations
### Fixed
* fix #441: Side bar not working with Nextcloud 32 (thanks to AndyXheli)
## 5.1.1
### Fixed
* fix(build): define appName to fix this error: "The `@nextcloud/vue` library was used without setting / replacing the `appName`"
* fix #349: add custom controller to retrieve core apps
## 5.1.0
### Added
* fix #425: allow to set a color using hex code
### Fixed
* #422: usage of `OC\AppFramework\Http\Request` instead of `$_SERVER`
## 5.0.3
### Fixed
* fix #422: undefined array key "HTTP_USER_AGENT"
## 5.0.2 ## 5.0.2
### Fixed ### Fixed
* fix #413: add user-agent check for memories mobile app * fix #413: add user-agent check for memories mobile app
@ -226,7 +182,7 @@
## 3.5.1 ## 3.5.1
### Added ### Added
* add translations (thanks to p-bo and gallegonovato) * add translations (thanks to p-bo adn gallegonovato)
### Fixed ### Fixed
* fix #189: sorting not applied on mobile * fix #189: sorting not applied on mobile
@ -355,323 +311,323 @@
## 2.3.2 ## 2.3.2
### Fixed ### Fixed
* fix hidden menu - fix hidden menu
## 2.3.1 ## 2.3.1
### Fixed ### Fixed
* fix #88: does not work with default menu - fix #88: does not work with default menu
## 2.3.0 ## 2.3.0
### Added ### Added
* fix #82: add an option to keep visible an app in both menus - fix #82: add an option to keep visible an app in both menus
* fix #83: add custom categories - fix #83: add custom categories
* add auto-reload when settings are saved - add auto-reload when settings are saved
## 2.2.0 ## 2.2.0
### Added ### Added
* fix #84: update icons - fix #84: update icons
* fix #85: use Nextcloud colors by default - fix #85: use Nextcloud colors by default
### Fixed ### Fixed
* fix categories order in large menu - fix categories order in large menu
## 2.1.0 ## 2.1.0
### Added ### Added
* add compatibility with Nextcloud 23 - add compatibility with Nextcloud 23
## 2.0.1 ## 2.0.1
### Fixed ### Fixed
* fix #78: Top menu is broken - invisible apps are shown - fix #78: Top menu is broken - invisible apps are shown
* fix #77: Update personal settings - HTTP error 412 (Precondition Failed) - fix #77: Update personal settings - HTTP error 412 (Precondition Failed)
* fix js error on the personal settings page (undefined sortable) - fix js error on the personal settings page (undefined sortable)
## 2.0.0 ## 2.0.0
### Fixed ### Fixed
* fix #66: removing usage of setInterval - fix #66: removing usage of setInterval
* fix #73: icon background - fix #73: icon background
### Changed ### Changed
* fix #67: replace jQuery with Vanilla JS - fix #67: replace jQuery with Vanilla JS
### Removed ### Removed
* Nextcloud 18 is not supported anymore - Nextcloud 18 is not supported anymore
## 1.28.0 ## 1.28.0
### Added ### Added
* fix #63: add a new side menu with categories - fix #63: add a new side menu with categories
## 1.27.2 ## 1.27.2
### Fixed ### Fixed
* fix #62: hide app notification icon - fix #62: hide app notification icon
## 1.27.1 ## 1.27.1
### Fixed ### Fixed
* fix German translation render - fix German translation render
## 1.27.0 ## 1.27.0
### Added ### Added
* hide personal settings access when settings are forced by the administrator - hide personal settings access when settings are forced by the administrator
### Fixed ### Fixed
* improve German translations - improve German translations
## 1.26.0 ## 1.26.0
### Added ### Added
* add Czech translation - add Czech translation
## 1.25.2 ## 1.25.2
### Fixed ### Fixed
* fix CHANGELOG - fix CHANGELOG
## 1.25.1 ## 1.25.1
### Added ### Added
* add PHP version as dependency - add PHP version as dependency
* add chinese translation - add chinese translation
### Fixed ### Fixed
* fix CHANGELOG - fix CHANGELOG
## 1.25.0 ## 1.25.0
### Added ### Added
* add compatibility with Nextcloud 22 - add compatibility with Nextcloud 22
* add CHANGELOG.md (fix #59) - add CHANGELOG.md (fix #59)
* update app icon - update app icon
## 1.24.0 ## 1.24.0
### Added ### Added
* add option to define the background opacity (fix #53) - add option to define the background opacity (fix #53)
* add missing translations - add missing translations
## 1.23.1 ## 1.23.1
### Fixed ### Fixed
* fix but wih dark mode opener option - fix but wih dark mode opener option
## 1.23.0 ## 1.23.0
### Added ### Added
* add support of dark Theme and Breeze Dark - add support of dark Theme and Breeze Dark
* add support of Nextcloud 21 - add support of Nextcloud 21
## 1.22.2 ## 1.22.2
### Fixed ### Fixed
* fix regression: apps does not open in new tab (fix #55) - fix regression: apps does not open in new tab (fix #55)
## 1.22.1 ## 1.22.1
### Fixed ### Fixed
* fix regression: apps does not open in new tab - fix regression: apps does not open in new tab
## 1.22.0 ## 1.22.0
### Added ### Added
* Add option to sort categories (fix #53) - Add option to sort categories (fix #53)
* Update admin UI - Update admin UI
## 1.21.0 ## 1.21.0
### Added ### Added
* [FEATURE] Logo in the menu links to main page of installation (#51) - [FEATURE] Logo in the menu links to main page of installation (#51)
## 1.20.1 ## 1.20.1
### Fixed ### Fixed
* Fix translations - Fix translations
## 1.20.0 ## 1.20.0
### Added ### Added
* [FEATURE] Ability to remove apps from the Big Menu (#49) - [FEATURE] Ability to remove apps from the Big Menu (#49)
## 1.19.1 ## 1.19.1
### Fixed ### Fixed
* fix #47: setting for list/grid view in files app flashes and dissapears - fix #47: setting for list/grid view in files app flashes and dissapears
## 1.19.0 ## 1.19.0
### Added ### Added
* add option: the menu is enabled by default for users (fix #46) - add option: the menu is enabled by default for users (fix #46)
## 1.18.0 ## 1.18.0
### Added ### Added
* add option to show link to settings (fix #44) - add option to show link to settings (fix #44)
* refactor menus using several components - refactor menus using several components
## 1.17.0 ## 1.17.0
### Added ### Added
* compliance with the app checker - compliance with the app checker
* add an action to export the configuration - add an action to export the configuration
* add an action to purge the cache - add an action to purge the cache
## 1.16.3 ## 1.16.3
### Fixed ### Fixed
* fix links that must be opened in new window (https://help.nextcloud.com/t/external-petit-probleme-concernant-lapplication-external-sites-ou-sites-externes/94884/11) - fix links that must be opened in new window (https://help.nextcloud.com/t/external-petit-probleme-concernant-lapplication-external-sites-ou-sites-externes/94884/11)
## 1.16.2 ## 1.16.2
### Fixed ### Fixed
* fix issue with personal settings when global settings are forced - fix issue with personal settings when global settings are forced
## 1.16.1 ## 1.16.1
### Fixed ### Fixed
* fix #42: add cache to manage failures to access apps.nextcloud.com - fix #42: add cache to manage failures to access apps.nextcloud.com
* fix #41: side menu was hover apps list - fix #41: side menu was hover apps list
## 1.16.0 ## 1.16.0
### Added ### Added
* add an option to force settings to users (fix #38) - add an option to force settings to users (fix #38)
## 1.15.0 ## 1.15.0
### Changed ### Changed
* New name - New name
### Fixed ### Fixed
* Fix #36: always displayed is not expanding - Fix #36: always displayed is not expanding
## 1.14.0 ## 1.14.0
### Added ### Added
* add an api accessed by components - add an api accessed by components
* add a config proxy in controllers - add a config proxy in controllers
### Fixed ### Fixed
* fix translations - fix translations
## 1.13.0 ## 1.13.0
### Added ### Added
* add an option to display the avatar instead of the logo (fix #34) - add an option to display the avatar instead of the logo (fix #34)
## 1.12.3 ## 1.12.3
### Added ### Added
* add a delay before moving elements (fix #33) - add a delay before moving elements (fix #33)
## 1.12.2 ## 1.12.2
### Fixed ### Fixed
* fix #30: `Always displayed` menu can not be close using touchscreens - fix #30: `Always displayed` menu can not be close using touchscreens
## 1.12.1 ## 1.12.1
### Fixed ### Fixed
* fix typo - fix typo
* fix translations - fix translations
## 1.12.0 ## 1.12.0
### Fixed ### Fixed
* fix #30: administrators and users can select what apps must be opened in new tab - fix #30: administrators and users can select what apps must be opened in new tab
* fix typo - fix typo
## 1.11.0 ## 1.11.0
### Added ### Added
* add the option for opening apps in new tab (fix #29) - add the option for opening apps in new tab (fix #29)
### Fixed ### Fixed
* fix issue with the header of the always displayed menu - fix issue with the header of the always displayed menu
## 1.10.0 ## 1.10.0
### Added ### Added
* add images to select the display of the menu - add images to select the display of the menu
* add live preview - add live preview
* update translations - update translations
* update app info - update app info
## 1.9.3 ## 1.9.3
### Fixed ### Fixed
* fix regression with logo display - fix regression with logo display
## 1.9.2 ## 1.9.2
### Added ### Added
* add the option “always displayed” which fixes the position of the menu to the left and always displays the application icons (fix #21, fix #2) - add the option “always displayed” which fixes the position of the menu to the left and always displays the application icons (fix #21, fix #2)
## 1.8.6 ## 1.8.6
### Added ### Added
* add translations: `fr` and `de` - add translations: `fr` and `de`
* improve and publish the `Makefile` - improve and publish the `Makefile`
* update documentation - update documentation
## 1.8.5 ## 1.8.5
### Fixed ### Fixed
* fix #28: menu items invisible after 1.8.4 - fix #28: menu items invisible after 1.8.4
## 1.8.4 ## 1.8.4
### Fixed ### Fixed
* fix #27: disable side menu on public pages - broken in 1.8.3 - fix #27: disable side menu on public pages - broken in 1.8.3
## 1.8.3 ## 1.8.3
### Fixed ### Fixed
* fix alphabetic order of apps (#26) - fix alphabetic order of apps (#26)
## 1.8.2 ## 1.8.2
### Added ### Added
* add icon for closing the big menu (fix #25) - add icon for closing the big menu (fix #25)
### Fixed ### Fixed
* fix hidden icons in the top menu (fix #23) - fix hidden icons in the top menu (fix #23)
* fix missing apps (fix #24) - fix missing apps (fix #24)
## 1.8.1 ## 1.8.1
### Fixed ### Fixed
* fix issue with links - fix issue with links
* fix missing l10n files - fix missing l10n files
## 1.8.0 ## 1.8.0
### Added ### Added
* add a `big menu` display (fix #22) - add a `big menu` display (fix #22)
* add the possibility to choose what apps are displayed in the top menu (fix #22) - add the possibility to choose what apps are displayed in the top menu (fix #22)
* add icon color filter - add icon color filter
* add icon opacity filter - add icon opacity filter
## 1.8.0-rc2 ## 1.8.0-rc2
## 1.7.0 ## 1.7.0
### Added ### Added
* add a loader when the page is unloading - add a loader when the page is unloading
* add compatibility with Nextcloud 19 - add compatibility with Nextcloud 19
## 1.6.3 ## 1.6.3
### Fixed ### Fixed
* fix #20: add a shortcut to open and to hide the menu - fix #20: add a shortcut to open and to hide the menu
## 1.6.2 ## 1.6.2
### Fixed ### Fixed
* fix #19: add a cache to limit flashes - fix #19: add a cache to limit flashes
## 1.6.1 ## 1.6.1
### Fixed ### Fixed
* fix #19: add a hack to show external sites in the top menu with navigation - fix #19: add a hack to show external sites in the top menu with navigation
## 1.6.0 ## 1.6.0
### Added ### Added
* Add a page of personal settings - Add a page of personal settings
* Add an option to disable the side menu as user - Add an option to disable the side menu as user
* Refactoring of javascripts - Refactoring of javascripts
## 1.5.0 ## 1.5.0
### Added ### Added
* add option to force light icons instead of dark icons - add option to force light icons instead of dark icons
### Fixed ### Fixed
* fix #19: add option to keep external sites in the top menu - fix #19: add option to keep external sites in the top menu
* fix #16 #17: add dark icons and handle the svg filters - fix #16 #17: add dark icons and handle the svg filters
## 1.4.1 ## 1.4.1
### Added ### Added
* Rendering harmonization with browsers - Rendering harmonization with browsers
### Fixed ### Fixed
* FIX #15: make menu start after icon - FIX #15: make menu start after icon
## 1.4.0 ## 1.4.0
### Fixed ### Fixed
* Fix #12: add an option to hide the opener and the panel when there is no application - Fix #12: add an option to hide the opener and the panel when there is no application
## 1.3.4 ## 1.3.4
### Fixed ### Fixed
* FIX #14: add option to show only the opener - FIX #14: add option to show only the opener
* FIX #13: add alternate hamburger icon - FIX #13: add alternate hamburger icon
* FIX #11: remove error in the console - FIX #11: remove error in the console
## 1.3.3 ## 1.3.3
### Added ### Added
* Add a second background color to create a background gradiant - Add a second background color to create a background gradiant
* Update documentation - Update documentation
### Fixed ### Fixed
* FIX #10: add options to select the size of the icons and the text, or hide them - FIX #10: add options to select the size of the icons and the text, or hide them
## 1.3.2 ## 1.3.2
### Fixed ### Fixed
* FIX #9: opener icon not visible with multiple apps_paths - FIX #9: opener icon not visible with multiple apps_paths
## 1.3.1 ## 1.3.1
### Fixed ### Fixed
* FIX #3: Add an opition the choose the position of the opener (after or before the logo) - FIX #3: Add an opition the choose the position of the opener (after or before the logo)
* FIX #8: Remove extension of dynamic asset's routes (js, css) - FIX #8: Remove extension of dynamic asset's routes (js, css)
## 1.3.0 ## 1.3.0
### Added ### Added
* `main.js` is replaced by a controller and a template - `main.js` is replaced by a controller and a template
### Fixed ### Fixed
* FIX #2: add option to open the menu by hovering over opener - FIX #2: add option to open the menu by hovering over opener
## 1.2.4 ## 1.2.4
### Fixed ### Fixed
* FIX #7: Opener icon not visible in Safari - FIX #7: Opener icon not visible in Safari

View file

@ -40,7 +40,7 @@ If you want to install it from source, go to https://gitnet.fr/deblan/side_menu/
``` ```
$ cd /path/to/nextcloud/apps $ cd /path/to/nextcloud/apps
$ VERSION=x.y.z; curl -sS "https://gitnet.fr/deblan/side_menu/releases/download/${VERSION}/side_menu_v${VERSION}.tar.gz" | tar xvfz - $ VERSION=x.y.z; curl -sS https://gitnet.fr/deblan/side_menu/releases/download/v${VERSION}/side_menu_v${VERSION}.tar.gz | tar xvfz -
``` ```
Administrators can edit many settings using the administration page. Administrators can edit many settings using the administration page.

View file

@ -30,7 +30,7 @@ Notice
Because I believe in a free and decentralized Internet, [Gitnet](https://gitnet.fr) is **self-hosted at home**. Because I believe in a free and decentralized Internet, [Gitnet](https://gitnet.fr) is **self-hosted at home**.
In case of downtime, you can download **Custom Menu** from [here](https://kim.deblan.fr/~side_menu/). In case of downtime, you can download **Custom Menu** from [here](https://kim.deblan.fr/~side_menu/).
]]></description> ]]></description>
<version>5.2.2</version> <version>5.0.2</version>
<licence>agpl</licence> <licence>agpl</licence>
<author mail="contact@deblan.fr" homepage="https://www.deblan.fr/">Simon Vieille</author> <author mail="contact@deblan.fr" homepage="https://www.deblan.fr/">Simon Vieille</author>
<namespace>SideMenu</namespace> <namespace>SideMenu</namespace>
@ -53,7 +53,7 @@ In case of downtime, you can download **Custom Menu** from [here](https://kim.de
<screenshot><![CDATA[https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/nc25_default_menu.png]]></screenshot> <screenshot><![CDATA[https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/nc25_default_menu.png]]></screenshot>
<dependencies> <dependencies>
<php min-version="8.1" max-version="8.4" /> <php min-version="8.1" max-version="8.4" />
<nextcloud min-version="31" max-version="33"/> <nextcloud min-version="31" max-version="32"/>
</dependencies> </dependencies>
<settings> <settings>
<admin>OCA\SideMenu\Settings\Admin</admin> <admin>OCA\SideMenu\Settings\Admin</admin>

View file

@ -2,9 +2,8 @@
namespace OCA\SideMenu\AppInfo; namespace OCA\SideMenu\AppInfo;
use OC\AllConfig; use OC;
use OC\App\AppStore\Fetcher\CategoryFetcher; use OC\App\AppStore\Fetcher\CategoryFetcher;
use OC\AppFramework\Http\Request;
use OC\Security\CSP\ContentSecurityPolicyNonceManager; use OC\Security\CSP\ContentSecurityPolicyNonceManager;
use OC\User\User; use OC\User\User;
use OCA\SideMenu\Service\AppRepository; use OCA\SideMenu\Service\AppRepository;
@ -32,12 +31,23 @@ use Psr\Container\ContainerInterface;
class Application extends App implements IBootstrap class Application extends App implements IBootstrap
{ {
public const APP_ID = 'side_menu'; public const APP_ID = 'side_menu';
public const APP_NAME = 'Custom menu'; public const APP_NAME = 'Custom menu';
protected AllConfig $config; /**
protected ContentSecurityPolicyNonceManager $cspnm; * @var OC\AllConfig
protected Request $request; */
protected ?User $user = null; protected $config;
/**
* @var ContentSecurityPolicyNonceManager
*/
protected $cspnm;
/**
* @var User
*/
protected $user;
public function __construct(array $urlParams = []) public function __construct(array $urlParams = [])
{ {
@ -86,7 +96,6 @@ class Application extends App implements IBootstrap
$this->config = \OC::$server->getConfig(); $this->config = \OC::$server->getConfig();
$this->cspnm = \OC::$server->getContentSecurityPolicyNonceManager(); $this->cspnm = \OC::$server->getContentSecurityPolicyNonceManager();
$this->user = \OC::$server[IUserSession::class]->getUser(); $this->user = \OC::$server[IUserSession::class]->getUser();
$this->request = \OC::$server->getRequest();
if (!$this->isEnabled()) { if (!$this->isEnabled()) {
return; return;
@ -97,7 +106,7 @@ class Application extends App implements IBootstrap
protected function isEnabled(): bool protected function isEnabled(): bool
{ {
if (isset($this->request->server['HTTP_USER_AGENT']) && preg_match('/MemoriesNative/', $this->request->server['HTTP_USER_AGENT'])) { if (preg_match('/MemoriesNative/', $_SERVER['HTTP_USER_AGENT'])) {
return false; return false;
} }

View file

@ -1,74 +0,0 @@
<?php
/**
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace OCA\SideMenu\Controller;
use OCA\SideMenu\Service\AppRepository;
use OCA\SideMenu\Service\ConfigProxy;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\Attribute\FrontpageRoute;
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\Attribute\PublicPage;
use OCP\AppFramework\Http\JSONResponse;
use OCP\IRequest;
use OCP\IUserSession;
class CoreController extends Controller
{
public function __construct(
string $appName,
IRequest $request,
protected ConfigProxy $config,
protected AppRepository $appRepository,
) {
parent::__construct($appName, $request);
}
#[NoCSRFRequired]
#[NoAdminRequired]
#[PublicPage]
#[FrontpageRoute(verb: 'GET', url: '/core/apps')]
public function items(): JSONResponse
{
$user = \OC::$server[IUserSession::class]->getUser();
$items = [];
if (!$user) {
return new JSONResponse([
'items' => $items,
]);
}
$apps = $this->appRepository->getOrderedApps($user);
$keys = ['id', 'name', 'category', 'href', 'icon'];
foreach ($apps as &$app) {
foreach ($app as $key => $value) {
if (!in_array($key, $keys)) {
unset($app[$key]);
}
}
}
return new JSONResponse([
'items' => $apps,
]);
}
}

View file

@ -20,6 +20,7 @@
namespace OCA\SideMenu\Controller; namespace OCA\SideMenu\Controller;
use OC\User\User; use OC\User\User;
use OCA\SideMenu\AppInfo\Application;
use OCA\SideMenu\Service\ConfigProxy; use OCA\SideMenu\Service\ConfigProxy;
use OCA\Theming\ThemingDefaults; use OCA\Theming\ThemingDefaults;
use OCP\AppFramework\Controller; use OCP\AppFramework\Controller;
@ -28,12 +29,10 @@ use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired; use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\Attribute\PublicPage; use OCP\AppFramework\Http\Attribute\PublicPage;
use OCP\AppFramework\Http\JSONResponse; use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\IRequest; use OCP\IRequest;
use OCP\IUserSession; use OCP\IUserSession;
use OCP\L10N\IFactory; use OCP\L10N\IFactory;
use OCP\IAvatarManager;
use OCP\INavigationManager;
use OCP\IURLGenerator;
class JsController extends Controller class JsController extends Controller
{ {
@ -45,13 +44,14 @@ class JsController extends Controller
protected ConfigProxy $config, protected ConfigProxy $config,
protected ThemingDefaults $themingDefaults, protected ThemingDefaults $themingDefaults,
protected IFactory $l10nFactory, protected IFactory $l10nFactory,
protected IAvatarManager $avatarManager,
protected IUserSession $userSession,
protected INavigationManager $navigationManager,
protected IURLGenerator $urlGenerator,
) { ) {
parent::__construct($appName, $request); parent::__construct($appName, $request);
$this->user = $this->userSession->getUser();
$this->themingDefaults = $themingDefaults;
$this->user = \OC::$server[IUserSession::class]->getUser();
$this->config = $config;
$this->l10nFactory = $l10nFactory;
} }
#[NoCSRFRequired] #[NoCSRFRequired]
@ -99,25 +99,25 @@ class JsController extends Controller
$targetBlankApps = $userTargetBlankApps; $targetBlankApps = $userTargetBlankApps;
} }
$isAvatarSet = $this->avatarManager->getAvatar($this->user->getUID())->exists(); $isAvatarSet = \OC::$server->getAvatarManager()->getAvatar($this->user->getUid())->exists();
if ($useAvatar && $isAvatarSet) { if ($useAvatar && $isAvatarSet) {
$avatar = $this->urlGenerator->linkToRoute('core.avatar.getAvatar', [ $avatar = \OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', [
'userId' => $this->user->getUID(), 'userId' => $this->user->getUid(),
'size' => 128, 'size' => 128,
'v' => $this->config->getUserValueInt($this->user, 'avatar', 'version', 0), 'v' => $this->config->getUserValueInt($this->user, 'avatar', 'version', 0),
]); ]);
} }
if ($this->config->getAppValueBool('show-settings', '0')) { if ($this->config->getAppValueBool('show-settings', '0')) {
$settingsNav = $this->navigationManager->getAll('settings'); $settingsNav = \OC::$server->getNavigationManager()->getAll('settings');
if (isset($settingsNav['settings'])) { if (isset($settingsNav['settings'])) {
$settings = [ $settings = [
'href' => $settingsNav['settings']['href'], 'href' => $settingsNav['settings']['href'],
'name' => $settingsNav['settings']['name'], 'name' => $settingsNav['settings']['name'],
'avatar' => $this->urlGenerator->linkToRoute('core.avatar.getAvatar', [ 'avatar' => \OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', [
'userId' => $this->user->getUID(), 'userId' => $this->user->getUid(),
'size' => 32, 'size' => 32,
'v' => $this->config->getUserValueInt($this->user, 'avatar', 'version', 0), 'v' => $this->config->getUserValueInt($this->user, 'avatar', 'version', 0),
]), ]),
@ -126,7 +126,7 @@ class JsController extends Controller
} }
} }
$indexUrl = $this->urlGenerator->linkTo('', 'index.php'); $indexUrl = \OC::$server->getURLGenerator()->linkTo('', 'index.php');
return [ return [
'opener-position' => $this->config->getAppValue('opener-position', 'before'), 'opener-position' => $this->config->getAppValue('opener-position', 'before'),

View file

@ -30,12 +30,7 @@ class LangRepository
->from('preferences') ->from('preferences')
; ;
// Nextcloud >=33+ $stmt = $qb->execute();
if (method_exists($qb, 'executeQuery')) {
$stmt = $qb->executeQuery();
} else {
$stmt = $qb->execute();
}
$langs = ['en']; $langs = ['en'];

8188
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -11,7 +11,6 @@
}, },
"dependencies": { "dependencies": {
"@babel/core": ">=7.12.0 <8.0.0", "@babel/core": ">=7.12.0 <8.0.0",
"@formatjs/intl-segmenter": "^12.0.8",
"@nextcloud/router": "^3.0.1", "@nextcloud/router": "^3.0.1",
"@nextcloud/vue": "^9.0.0-alpha.8", "@nextcloud/vue": "^9.0.0-alpha.8",
"node-polyfill-webpack-plugin": "^4.1.0", "node-polyfill-webpack-plugin": "^4.1.0",

View file

@ -17,8 +17,6 @@
import './scss/admin.scss' import './scss/admin.scss'
import '@formatjs/intl-segmenter/polyfill.js'
import { createApp } from 'vue' import { createApp } from 'vue'
import { createPinia } from 'pinia' import { createPinia } from 'pinia'
import { waitContainer } from './lib/dom.js' import { waitContainer } from './lib/dom.js'

View file

@ -73,10 +73,10 @@ const save = async () => {
if (Array.isArray(value) || typeof value === 'object') { if (Array.isArray(value) || typeof value === 'object') {
value = JSON.stringify(value) value = JSON.stringify(value)
} else if (typeof value === 'boolean') { } else if (typeof value === 'boolean') {
value = value ? '1' : '0' value = value ? 1 : 0
} }
OCP.AppConfig.setValue('side_menu', key, value.toString(), { OCP.AppConfig.setValue('side_menu', key, value, {
success() { success() {
update() update()
}, },

View file

@ -69,11 +69,11 @@ const save = async () => {
if (Array.isArray(value) || typeof value === 'object') { if (Array.isArray(value) || typeof value === 'object') {
value = JSON.stringify(value) value = JSON.stringify(value)
} else if (typeof value === 'boolean') { } else if (typeof value === 'boolean') {
value = value ? '1' : '0' value = value ? 1 : 0
} }
formData.push('name=' + encodeURIComponent(key)) formData.push('name=' + encodeURIComponent(key))
formData.push('value=' + encodeURIComponent(value.toString())) formData.push('value=' + encodeURIComponent(value))
fetch(url, { fetch(url, {
method: 'POST', method: 'POST',

View file

@ -17,7 +17,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<template> <template>
<NcColorPicker <NcColorPicker
v-model="model" v-model="model"
:advancedFields="true"
class="cm-settings-form-colorpicker" class="cm-settings-form-colorpicker"
> >
<div <div

View file

@ -94,18 +94,18 @@
'Search': 'Hledat' 'Search': 'Hledat'
'Toggle the menu': 'Vyp/zap nabídku' 'Toggle the menu': 'Vyp/zap nabídku'
'Open the documentation': 'Open the documentation' 'Open the documentation': 'Open the documentation'
'Ask the developer': 'Zeptejte se vývojáře' 'Ask the developer': 'Ask the developer'
'New request': 'Nový požadavek' 'New request': 'New request'
'Report a bug': 'Nahlásit chybu' 'Report a bug': 'Report a bug'
'Show the configuration': 'Zobrazit nastavení' 'Show the configuration': 'Show the configuration'
'Configuration:': 'Configuration:' 'Configuration:': 'Configuration:'
'Done!': 'Hotovo!' 'Done!': 'Done!'
'Copy': 'Zkopírovat' 'Copy': 'Copy'
'Need help': 'Potřebuji pomoc' 'Need help': 'Need help'
'I would like a new feature': 'Rád bych novou funkci v aplikaci' 'I would like a new feature': 'I would like a new feature'
'Something went wrong': 'Něco se pokazilo' 'Something went wrong': 'Something went wrong'
'Select apps': 'Vyberte aplikace' 'Select apps': 'Select apps'
'Sort': 'Seřadit' 'Sort': 'Sort'
'Customize': 'Přizpůsobit' 'Customize': 'Customize'
'Custom': 'Custom' 'Custom': 'Custom'
'Close': 'Zavřít' 'Close': 'Close'

View file

@ -94,18 +94,18 @@
'Search': 'Buscar' 'Search': 'Buscar'
'Toggle the menu': 'Alternar el menú' 'Toggle the menu': 'Alternar el menú'
'Open the documentation': 'Open the documentation' 'Open the documentation': 'Open the documentation'
'Ask the developer': 'Pregúntale al desarrollador' 'Ask the developer': 'Ask the developer'
'New request': 'Nueva solicitud' 'New request': 'New request'
'Report a bug': 'Informar de un fallo' 'Report a bug': 'Report a bug'
'Show the configuration': 'Mostrar los ajustes' 'Show the configuration': 'Show the configuration'
'Configuration:': 'Configuration:' 'Configuration:': 'Configuration:'
'Done!': '¡Realizado!' 'Done!': 'Done!'
'Copy': 'Copiar' 'Copy': 'Copy'
'Need help': 'Ayudame' 'Need help': 'Need help'
'I would like a new feature': 'Me gustaría una nueva función' 'I would like a new feature': 'I would like a new feature'
'Something went wrong': 'Algo salió mal' 'Something went wrong': 'Something went wrong'
'Select apps': 'Selecciona las aplicaciones' 'Select apps': 'Select apps'
'Sort': 'Ordenar' 'Sort': 'Sort'
'Customize': 'Personalizar' 'Customize': 'Customize'
'Custom': 'Custom' 'Custom': 'Custom'
'Close': 'Cerrar' 'Close': 'Close'

View file

@ -3,18 +3,13 @@
'No': 'Non' 'No': 'Non'
'Yes': 'Oui' 'Yes': 'Oui'
'Menu': 'Menu' 'Menu': 'Menu'
'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.': 'Utiliser 'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.': 'Utiliser le raccourcis clavier Ctrl+o pour ouvrir et fermer le menu latéral. Utiliser tab key pour naviguer.'
le raccourcis clavier Ctrl+o pour ouvrir et fermer le menu latéral. Utiliser tab
key pour naviguer.'
'Top menu': 'Menu supérieur' 'Top menu': 'Menu supérieur'
'Apps that not must be moved in the side menu': 'Les applications qui ne doivent pas 'Apps that not must be moved in the side menu': 'Les applications qui ne doivent pas être affichées dans le menu latéral'
être affichées dans le menu latéral' 'If there is no selection then the global configuration is applied.': "Si il n'y a aucune sélection alors la configuration globale sera appliquée."
'If there is no selection then the global configuration is applied.': "Si il n'y a
aucune sélection alors la configuration globale sera appliquée."
'Experimental': 'Expérimental' 'Experimental': 'Expérimental'
'Save': 'Sauvegarder' 'Save': 'Sauvegarder'
'You like this app and you want to support me?': "Vous aimer cette application et 'You like this app and you want to support me?': "Vous aimer cette application et vous souhaitez m'aider ?"
vous souhaitez m'aider ?"
'Buy me a coffee ☕': 'Offrez moi un café ☕' 'Buy me a coffee ☕': 'Offrez moi un café ☕'
'Hidden': 'Caché' 'Hidden': 'Caché'
'Small': 'Petit' 'Small': 'Petit'
@ -48,22 +43,17 @@
'Before the logo': 'Avant le logo' 'Before the logo': 'Avant le logo'
'After the logo': 'Après le logo' 'After the logo': 'Après le logo'
'Position': 'Position' 'Position': 'Position'
'Show only the opener (hidden logo)': "Afficher uniquement le bouton d'ouverture (masquer 'Show only the opener (hidden logo)': "Afficher uniquement le bouton d'ouverture (masquer le logo)"
le logo)" 'Do not display the side menu and the opener if there is no application (eg: public pages).': "Ne pas afficher le menu latéral et le bouton d'ouverture s'il n'y a aucune application (exemple : page publiques)."
'Do not display the side menu and the opener if there is no application (eg: public pages).': "Ne
pas afficher le menu latéral et le bouton d'ouverture s'il n'y a aucune application
(exemple : page publiques)."
'Panel': 'Panneau' 'Panel': 'Panneau'
'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': 'Ouvrir 'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': 'Ouvrir le menu au passage de la souris (automatiquement désactivé sur les écrans tactiles)'
le menu au passage de la souris (automatiquement désactivé sur les écrans tactiles)'
'Display the big menu': 'Afficher le menu large' 'Display the big menu': 'Afficher le menu large'
'Display the logo': 'Afficher le logo' 'Display the logo': 'Afficher le logo'
'Icons and texts': 'Icônes et textes' 'Icons and texts': 'Icônes et textes'
'Loader enabled': "Activation de l'indicateur de chargement" 'Loader enabled': "Activation de l'indicateur de chargement"
'Tips': 'Astuces' 'Tips': 'Astuces'
'Always displayed': 'Toujours affiché' 'Always displayed': 'Toujours affiché'
'This is the automatic behavior when the menu is always displayed.': "C'est le comportement 'This is the automatic behavior when the menu is always displayed.': "C'est le comportement automatique lorsque le menu est toujours affiché."
automatique lorsque le menu est toujours affiché."
'Not compatible with touch screens.': 'Incompatible avec les écrans tactiles.' 'Not compatible with touch screens.': 'Incompatible avec les écrans tactiles.'
'Big menu': 'Menu large' 'Big menu': 'Menu large'
'Live preview': 'Aperçu en direct' 'Live preview': 'Aperçu en direct'
@ -72,21 +62,16 @@
'Use my selection': 'Utiliser ma sélection' 'Use my selection': 'Utiliser ma sélection'
'Show and hide the list of applications': 'Afficher et masquer la liste des applications' 'Show and hide the list of applications': 'Afficher et masquer la liste des applications'
'Use the avatar instead of the logo': "Utiliser l'avatar à la place du logo" 'Use the avatar instead of the logo': "Utiliser l'avatar à la place du logo"
'You do not have permission to change the settings.': "Vous n'avez pas la permission 'You do not have permission to change the settings.': "Vous n'avez pas la permission de changer les paramètres."
de changer les paramètres."
'Force this configuration to users': 'Forcer cette configuration aux utilisateurs' 'Force this configuration to users': 'Forcer cette configuration aux utilisateurs'
'Export the configuration': 'Exporter la configuration' 'Export the configuration': 'Exporter la configuration'
'Purge the cache': 'Purger le cache' 'Purge the cache': 'Purger le cache'
'Show the link to settings': 'Afficher le lien vers les paramètres' 'Show the link to settings': 'Afficher le lien vers les paramètres'
'The menu is enabled by default for users': 'Le menu est activé par défaut pour les 'The menu is enabled by default for users': 'Le menu est activé par défaut pour les utilisateurs'
utilisateurs'
'Except when the configuration is forced.': 'Sauf lorsque la configuration est forcée.' 'Except when the configuration is forced.': 'Sauf lorsque la configuration est forcée.'
'Apps that should not be displayed in the menu': 'Applications qui ne doivent pas 'Apps that should not be displayed in the menu': 'Applications qui ne doivent pas être affichées dans le menu'
être affichées dans le menu' 'This feature is only compatible with the <code>big menu</code> display.': "Compatible avec l'affichage <code>Menu large</code>."
'This feature is only compatible with the <code>big menu</code> display.': "Compatible 'The logo is a link to the default app': "Le logo est un lien vers l'application par défaut"
avec l'affichage <code>Menu large</code>."
'The logo is a link to the default app': "Le logo est un lien vers l'application par
défaut"
'Others': 'Autres' 'Others': 'Autres'
'Categories': 'Catégories' 'Categories': 'Catégories'
'Customize sorting': 'Personnaliser le tri' 'Customize sorting': 'Personnaliser le tri'
@ -94,8 +79,7 @@
'Name': 'Nom' 'Name': 'Nom'
'Customed': 'Personnalisé' 'Customed': 'Personnalisé'
'Show and hide the list of categories': 'Afficher et masquer la liste des catégories' 'Show and hide the list of categories': 'Afficher et masquer la liste des catégories'
'This parameters are used when Dark theme or Breeze Dark Theme are enabled.': 'Ces 'This parameters are used when Dark theme or Breeze Dark Theme are enabled.': 'Ces paramètres sont utilisés lorsque le thème sombre ou le thème Breeze Dark sont activés.'
paramètres sont utilisés lorsque le thème sombre ou le thème Breeze Dark sont activés.'
'Dark mode colors': 'Couleurs du mode sombre' 'Dark mode colors': 'Couleurs du mode sombre'
'With categories': 'Avec les catégories' 'With categories': 'Avec les catégories'
'Custom categories': 'Catégories personnalisées' 'Custom categories': 'Catégories personnalisées'
@ -103,12 +87,9 @@
'Reset to default': 'Restaurer les valeurs par défaut' 'Reset to default': 'Restaurer les valeurs par défaut'
'Applications': 'Applications' 'Applications': 'Applications'
'Applications kept in the top menu': 'Applications conservées dans le menu supérieur' 'Applications kept in the top menu': 'Applications conservées dans le menu supérieur'
'Applications kept in the top menu but also shown in side menu': 'Applications conservées 'Applications kept in the top menu but also shown in side menu': 'Applications conservées dans le menu supérieur mais également affichées dans le menu latéral'
dans le menu supérieur mais également affichées dans le menu latéral' 'These applications must be selected in the previous option.': "Ces applications doivent également être sélectionnées dans l'option précédente."
'These applications must be selected in the previous option.': "Ces applications doivent 'Hide labels on mouse over': 'Masquer le libellé des applications au passage de la souris'
également être sélectionnées dans l'option précédente."
'Hide labels on mouse over': 'Masquer le libellé des applications au passage de la
souris'
'Except the hovered app': "À l'exception de l'application survolée" 'Except the hovered app': "À l'exception de l'application survolée"
'Search': 'Rechercher' 'Search': 'Rechercher'
'Toggle the menu': 'Basculer le menu' 'Toggle the menu': 'Basculer le menu'

View file

@ -3,7 +3,7 @@
'No': 'Non' 'No': 'Non'
'Yes': 'Si' 'Yes': 'Si'
'Menu': 'Menú' 'Menu': 'Menú'
'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.': 'Use o atallo Ctrl+o para abrir e agochar o menú lateral. Use a tecla Tab para navegar.' 'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.': 'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.'
'Top menu': 'Top menu' 'Top menu': 'Top menu'
'Apps that not must be moved in the side menu': 'As aplicacións que non deben moverse no menú lateral' 'Apps that not must be moved in the side menu': 'As aplicacións que non deben moverse no menú lateral'
'If there is no selection then the global configuration is applied.': 'Se non hai selección, aplícase a configuración global.' 'If there is no selection then the global configuration is applied.': 'Se non hai selección, aplícase a configuración global.'
@ -94,18 +94,18 @@
'Search': 'Buscar' 'Search': 'Buscar'
'Toggle the menu': 'Alternar o menú' 'Toggle the menu': 'Alternar o menú'
'Open the documentation': 'Open the documentation' 'Open the documentation': 'Open the documentation'
'Ask the developer': 'Preguntar ao desenvolvedor' 'Ask the developer': 'Ask the developer'
'New request': 'Nova solicitude' 'New request': 'New request'
'Report a bug': 'Informar dun fallo' 'Report a bug': 'Report a bug'
'Show the configuration': 'Amosar a configuración' 'Show the configuration': 'Show the configuration'
'Configuration:': 'Configuración:' 'Configuration:': 'Configuration:'
'Done!': 'Feito!' 'Done!': 'Done!'
'Copy': 'Copiar' 'Copy': 'Copy'
'Need help': 'Necesito axuda' 'Need help': 'Need help'
'I would like a new feature': 'Gustaríame unha nova característica' 'I would like a new feature': 'I would like a new feature'
'Something went wrong': 'Algo foi mal' 'Something went wrong': 'Something went wrong'
'Select apps': 'Seleccionar as aplicacións' 'Select apps': 'Select apps'
'Sort': 'Ordenar' 'Sort': 'Sort'
'Customize': 'Personalizar' 'Customize': 'Customize'
'Custom': 'Personalizado' 'Custom': 'Custom'
'Close': 'Pechar' 'Close': 'Close'

View file

@ -1,4 +1,4 @@
'Custom menu': 'Пользовательское меню' 'Custom menu': 'Custom menu'
'Enable the custom menu': 'Включить пользовательское меню' 'Enable the custom menu': 'Включить пользовательское меню'
'No': 'Нет' 'No': 'Нет'
'Yes': 'Да' 'Yes': 'Да'
@ -43,8 +43,8 @@
'Before the logo': 'Перед логотипом' 'Before the logo': 'Перед логотипом'
'After the logo': 'После логотипа' 'After the logo': 'После логотипа'
'Position': 'Положение' 'Position': 'Положение'
'Show only the opener (hidden logo)': 'Показать только открывающую кнопку (скрытый логотип)' 'Show only the opener (hidden logo)': 'Показать только открывающую часть (скрытый логотип)'
'Do not display the side menu and the opener if there is no application (eg: public pages).': 'Не отображать боковое меню и открывалку, если нет доступного приложения (н.п. публичные страницы).' 'Do not display the side menu and the opener if there is no application (eg: public pages).': 'Не отображать боковое меню и открывалку, если нет приложения (например, публичные страницы).'
'Panel': 'Панель' 'Panel': 'Панель'
'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': 'Открывать меню при наведении мыши на открывалку (автоматически отключается на сенсорных экранах)' 'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': 'Открывать меню при наведении мыши на открывалку (автоматически отключается на сенсорных экранах)'
'Display the big menu': 'Отобразить большое меню' 'Display the big menu': 'Отобразить большое меню'
@ -63,21 +63,21 @@
'Show and hide the list of applications': 'Показать или скрыть список приложений' 'Show and hide the list of applications': 'Показать или скрыть список приложений'
'Use the avatar instead of the logo': 'Использовать аватар вместо логотипа' 'Use the avatar instead of the logo': 'Использовать аватар вместо логотипа'
'You do not have permission to change the settings.': 'У вас нет разрешения изменять настройки.' 'You do not have permission to change the settings.': 'У вас нет разрешения изменять настройки.'
'Force this configuration to users': 'Для обеспечения соблюдения этих настроек пользователями' 'Force this configuration to users': 'Принудительно предоставить эту конфигурацию пользователям'
'Export the configuration': 'Экспортировать конфигурацию' 'Export the configuration': 'Экспортировать конфигурацию'
'Purge the cache': 'Очистить кэш' 'Purge the cache': 'Очистить кэш'
'Show the link to settings': 'Показать ссылку на настройки' 'Show the link to settings': 'Показать ссылку на настройки'
'The menu is enabled by default for users': 'Это меню включено по умолчанию для пользователей' 'The menu is enabled by default for users': 'Это меню включено по умолчанию для пользователей'
'Except when the configuration is forced.': 'За исключением случаев, когда настройка принудительная.' 'Except when the configuration is forced.': 'За исключением случаев, когда конфигурация является принудительной.'
'Apps that should not be displayed in the menu': 'Ппрограммы, скрытые из меню' 'Apps that should not be displayed in the menu': 'Ппрограммы, скрытые из меню'
'This feature is only compatible with the <code>big menu</code> display.': 'Эта возможность совместима только с отображением <code>большого меню</code>.' 'This feature is only compatible with the <code>big menu</code> display.': 'Эта функция совместима только с отображением <code>большого меню</code>.'
'The logo is a link to the default app': 'Логотип открывает приложение по умолчанию' 'The logo is a link to the default app': 'Логотип открывает приложение по умолчанию'
'Others': 'Прочие' 'Others': 'Прочие'
'Categories': 'Категории' 'Categories': 'Категории'
'Customize sorting': 'Настроить сортировку' 'Customize sorting': 'Настроить сортировку'
'Order by': 'В порядке' 'Order by': 'В порядке'
'Name': 'Название' 'Name': 'Название'
'Customed': 'Пользовательское' 'Customed': 'Customed'
'Show and hide the list of categories': 'Показать или скрыть список категорий' 'Show and hide the list of categories': 'Показать или скрыть список категорий'
'This parameters are used when Dark theme or Breeze Dark Theme are enabled.': 'Эти настройки используются темами Тёмная и Тёмная Breeze.' 'This parameters are used when Dark theme or Breeze Dark Theme are enabled.': 'Эти настройки используются темами Тёмная и Тёмная Breeze.'
'Dark mode colors': 'Цвета тёмной темы' 'Dark mode colors': 'Цвета тёмной темы'
@ -90,22 +90,22 @@
'Applications kept in the top menu but also shown in side menu': 'Приложения хранящиеся в верхнем меню, но также отображающиеся в боковом меню' 'Applications kept in the top menu but also shown in side menu': 'Приложения хранящиеся в верхнем меню, но также отображающиеся в боковом меню'
'These applications must be selected in the previous option.': 'Эти приложения необходимо выбрать в предыдущем выборе.' 'These applications must be selected in the previous option.': 'Эти приложения необходимо выбрать в предыдущем выборе.'
'Hide labels on mouse over': 'Скрыть название при наведении мыши' 'Hide labels on mouse over': 'Скрыть название при наведении мыши'
'Except the hovered app': 'Кроме приложения на котором сейчас' 'Except the hovered app': 'Кроме приложения, на котором курсор'
'Search': 'Поиск' 'Search': 'Поиск'
'Toggle the menu': 'Переключить меню' 'Toggle the menu': 'Переключить меню'
'Open the documentation': 'Open the documentation' 'Open the documentation': 'Open the documentation'
'Ask the developer': 'Спросить разработчика' 'Ask the developer': 'Ask the developer'
'New request': 'Новый запрос' 'New request': 'New request'
'Report a bug': 'Пожаловаться на ошибку' 'Report a bug': 'Report a bug'
'Show the configuration': 'Показать конфигурацию' 'Show the configuration': 'Show the configuration'
'Configuration:': 'Configuration:' 'Configuration:': 'Configuration:'
'Done!': 'Готово!' 'Done!': 'Done!'
'Copy': 'Копировать' 'Copy': 'Copy'
'Need help': 'Нужна помощь' 'Need help': 'Need help'
'I would like a new feature': 'Я хочу новую возможность' 'I would like a new feature': 'I would like a new feature'
'Something went wrong': 'Что-то пошло не так' 'Something went wrong': 'Something went wrong'
'Select apps': 'Выберете приложения' 'Select apps': 'Select apps'
'Sort': 'Сортировать' 'Sort': 'Sort'
'Customize': 'Приспособить' 'Customize': 'Customize'
'Custom': 'Custom' 'Custom': 'Custom'
'Close': 'Закрыть' 'Close': 'Close'

View file

@ -90,7 +90,7 @@
'Applications kept in the top menu but also shown in side menu': 'Applications kept in the top menu but also shown in side menu' 'Applications kept in the top menu but also shown in side menu': 'Applications kept in the top menu but also shown in side menu'
'These applications must be selected in the previous option.': 'These applications must be selected in the previous option.' 'These applications must be selected in the previous option.': 'These applications must be selected in the previous option.'
'Hide labels on mouse over': 'Hide labels on mouse over' 'Hide labels on mouse over': 'Hide labels on mouse over'
'Toggle the menu': 'Prepnite ponuku' 'Toggle the menu': 'Toggle the menu'
'Open the documentation': 'Open the documentation' 'Open the documentation': 'Open the documentation'
'Ask the developer': 'Ask the developer' 'Ask the developer': 'Ask the developer'
'New request': 'New request' 'New request': 'New request'

View file

@ -1,111 +0,0 @@
'Custom menu': 'Anpassad meny'
'Enable the custom menu': 'Aktivera den anpassade menyn'
'No': 'Nej'
'Yes': 'Ja'
'Menu': 'Meny'
'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.': 'Använd genvägen Ctrl+o för att visa eller dölja sidomenyn. Använd tabb-tangenten för att navigera.'
'Top menu': 'Toppmeny'
'Apps that not must be moved in the side menu': 'Appar som inte får flyttas i sidomenyn'
'If there is no selection then the global configuration is applied.': 'Om inget val har gjorts tillämpas den globala konfigurationen.'
'Experimental': 'Experimentell'
'Save': 'Spara'
'You like this app and you want to support me?': 'Gillar du den här appen och vill stödja mig?'
'Buy me a coffee ☕': 'Bjud mig på en kaffe ☕'
'Hidden': 'Dold'
'Small': 'Liten'
'Normal': 'Normal'
'Big': 'Stor'
'Hidden icon': 'Dold ikon'
'Small icon': 'Liten ikon'
'Normal icon': 'Normal ikon'
'Big icon': 'Stor ikon'
'Hidden text': 'Dold text'
'Small text': 'Liten text'
'Normal text': 'Normal text'
'Big text': 'Stor text'
'Colors': 'Färger'
'Background color': 'Bakgrundsfärg'
'Background color of current app': 'Bakgrundsfärg för aktuell app'
'Text color': 'Textfärg'
'Loader': 'Laddare'
'Icon': 'Ikon'
'Same color': 'Samma färg'
'Opposite color': 'Motsatt färg'
'Transparent': 'Transparent'
'Opaque': 'Ogenomskinlig'
'Opener': 'Öppnare'
'Default': 'Standard'
'Default (dark)': 'Standard(mörk)'
'Hamburger': 'Hamburgermeny'
'Hamburger (dark)': 'Hamburgermeny(mörk)'
'Hamburger 2': 'Hamburgermeny 2'
'Hamburger 2 (dark)': 'Hamburgermeny 2 (mörk)'
'Before the logo': 'Före logotypen'
'After the logo': 'Efter logotypen'
'Position': 'Position'
'Show only the opener (hidden logo)': 'Visa endast öppnaren (gömd logotyp)'
'Do not display the side menu and the opener if there is no application (eg: public pages).': 'Visa inte sidomenyn eller öppnaren om det inte finns någon applikation (t.ex. publika sidor).'
'Panel': 'Panel'
'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': 'Öppna menyn när muspekaren hovrar över öppnaren (automatiskt avaktiverat på pekskärmar)'
'Display the big menu': 'Visa den stora menyn'
'Display the logo': 'Visa logotypen'
'Icons and texts': 'Ikoner och texter'
'Loader enabled': 'Laddare aktiverad'
'Tips': 'Tips'
'Always displayed': 'Alltid visad'
'This is the automatic behavior when the menu is always displayed.': 'Detta är det automatiska beteendet när menyn alltid är visad.'
'Not compatible with touch screens.': 'Inte kompatibel med pekskärmar.'
'Big menu': 'Stor meny'
'Live preview': 'Förhandsgranskning i realtid'
'Open apps in new tab': 'Öppna appar i ny flik'
'Use the global setting': 'Använd den globala inställningen'
'Use my selection': 'Använd mitt val'
'Show and hide the list of applications': 'Visa och dölj listan över applikationer'
'Use the avatar instead of the logo': 'Använd avataren istället för logotypen'
'You do not have permission to change the settings.': 'Du har inte behörighet att ändra inställningarna.'
'Force this configuration to users': 'Tvinga denna konfiguration för användare'
'Export the configuration': 'Exportera konfigurationen'
'Purge the cache': 'Rensa cachen'
'Show the link to settings': 'Visa länken till inställningarna'
'The menu is enabled by default for users': 'Menyn är aktiverad som standard för användare'
'Except when the configuration is forced.': 'Förutom när konfigurationen är tvingad.'
'Apps that should not be displayed in the menu': 'Appar som inte ska visas i menyn'
'This feature is only compatible with the <code>big menu</code> display.': 'Denna funktion är endast kompatibel med <code>stor meny</code>.'
'The logo is a link to the default app': 'Logotypen är en länk till standardappen'
'Others': 'Övriga'
'Categories': 'Kategorier'
'Customize sorting': 'Anpassa sortering'
'Order by': 'Sortera efter'
'Name': 'Namn'
'Customed': 'Anpassad'
'Show and hide the list of categories': 'Visa och dölj listan över kategorier'
'This parameters are used when Dark theme or Breeze Dark Theme are enabled.': 'Dessa parametrar används när mörkt tema eller Breeze Dark Theme är aktiverade.'
'Dark mode colors': 'Färger för mörkt läge'
'With categories': 'Med kategorier'
'Custom categories': 'Anpassade kategorier'
'Customize application categories': 'Anpassa app kategorier'
'Reset to default': 'Återställ till standardvärden'
'Applications': 'Applikationer'
'Applications kept in the top menu': 'Applikationer som hålls i toppmenyn'
'Applications kept in the top menu but also shown in side menu': 'Applikationer som visas både i toppmenyn och i sidomenyn'
'These applications must be selected in the previous option.': 'Dessa applikationer måste väljas i föregående alternativ.'
'Hide labels on mouse over': 'Dölj etiketter när muspekaren är över'
'Except the hovered app': 'Förutom den app som muspekaren är över'
'Search': 'Sök'
'Toggle the menu': 'Växla menyn'
'Open the documentation': 'Öppna dokumentationen'
'Ask the developer': 'Fråga utvecklaren'
'New request': 'Ny förfrågan'
'Report a bug': 'Rapportera ett fel'
'Show the configuration': 'Visa konfigurationen'
'Configuration:': 'Konfiguration:'
'Done!': 'Klar!'
'Copy': 'Kopiera'
'Need help': 'Behöver hjälp'
'I would like a new feature': 'Jag skulle vilja ha en ny funktion'
'Something went wrong': 'Något gick fel'
'Select apps': 'Välj appar'
'Sort': 'Sortera'
'Customize': 'Anpassa'
'Custom': 'Anpassad'
'Close': 'Stäng'

View file

@ -1,9 +1,9 @@
'Custom menu': '自定义菜单' 'Custom menu': '自定义菜单'
'Enable the custom menu': '启用自定义菜单' 'Enable the custom menu': '启用自定义菜单'
'No': '' 'No': '取消'
'Yes': '' 'Yes': '确定'
'Menu': '菜单' 'Menu': '菜单'
'Use the shortcut Ctrl+o to open and to hide the side menu. Use <span class="keyboard-key">tab</span> to navigate.': '使用快捷键 Ctrl+o 打开或隐藏侧边栏菜单。使用 <span class="keyboard-key">Tab</span> 键来导航。' 'Use the shortcut Ctrl+o to open and to hide the side menu. Use <span class="keyboard-key">tab</span> to navigate.': '使用快捷键 Ctrl+o 打开或隐藏侧边栏菜单。使用<span class="keyboard-key">tab</span> 来导航。'
'Top menu': '顶部菜单' 'Top menu': '顶部菜单'
'Apps that not must be moved in the side menu': '禁止在侧边栏菜单移动的应用' 'Apps that not must be moved in the side menu': '禁止在侧边栏菜单移动的应用'
'If there is no selection then the global configuration is applied.': '如果没有选择,则应用全局配置。' 'If there is no selection then the global configuration is applied.': '如果没有选择,则应用全局配置。'
@ -25,7 +25,7 @@
'Opposite color': '相反颜色' 'Opposite color': '相反颜色'
'Transparent': '透明' 'Transparent': '透明'
'Opaque': '不透明' 'Opaque': '不透明'
'Opener': '触发器' 'Opener': '器'
'Default': '默认' 'Default': '默认'
'Default (dark)': '默认(深色)' 'Default (dark)': '默认(深色)'
'Hamburger': 'Hamburger' 'Hamburger': 'Hamburger'
@ -35,10 +35,10 @@
'Before the logo': '在徽标之前' 'Before the logo': '在徽标之前'
'After the logo': '在徽标之后' 'After the logo': '在徽标之后'
'Position': '位置' 'Position': '位置'
'Show only the opener (hidden logo)': '仅显示触发器(隐藏徽标)' 'Show only the opener (hidden logo)': '只显示容器(隐藏徽标)'
'Do not display the side menu and the opener if there is no application (eg: public pages).': '如果没有应用程序(例如:公共页面),则不要显示侧边栏菜单和触发器。' 'Do not display the side menu and the opener if there is no application (eg: public pages).': '如果没有应用程序(例如:公共页面),则不要显示侧边栏菜单和器。'
'Panel': '面板' 'Panel': '面板'
'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': '当鼠标悬停在触发器上时打开菜单(在触摸屏上自动禁用)' 'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': '鼠标悬停时打开菜单 (触摸屏时将自动禁用)'
'Display the big menu': '显示大型菜单' 'Display the big menu': '显示大型菜单'
'Display the logo': '显示徽标' 'Display the logo': '显示徽标'
'Icons and texts': '图标和文本' 'Icons and texts': '图标和文本'
@ -63,7 +63,7 @@
'Except when the configuration is forced.': '除非强制配置。' 'Except when the configuration is forced.': '除非强制配置。'
'Apps that should not be displayed in the menu': '禁止在菜单中显示的应用' 'Apps that should not be displayed in the menu': '禁止在菜单中显示的应用'
'This feature is only compatible with the <code>big menu</code> display.': '此功能只和<code>大型菜单</code>兼容。' 'This feature is only compatible with the <code>big menu</code> display.': '此功能只和<code>大型菜单</code>兼容。'
'The logo is a link to the default app': '徽标链接到默认应用' 'The logo is a link to the default app': 'logo链接到默认应用'
'Others': '其他' 'Others': '其他'
'Categories': '类别' 'Categories': '类别'
'Customize sorting': '自定义排序' 'Customize sorting': '自定义排序'
@ -85,27 +85,27 @@
'Small text': '小文本' 'Small text': '小文本'
'Normal text': '普通文本' 'Normal text': '普通文本'
'Big text': '大文本' 'Big text': '大文本'
'Applications': '应用程序' 'Applications': 'Applications'
'Applications kept in the top menu': '应用程序保留在顶部菜单中' 'Applications kept in the top menu': 'Applications kept in the top menu'
'Applications kept in the top menu but also shown in side menu': '应用程序保留在顶部菜单中,但也显示在侧边栏菜单中' 'Applications kept in the top menu but also shown in side menu': 'Applications kept in the top menu but also shown in side menu'
'These applications must be selected in the previous option.': '必须在上一个选项中选择这些应用程序。' 'These applications must be selected in the previous option.': 'These applications must be selected in the previous option.'
'Hide labels on mouse over': '鼠标悬停时隐藏标签' 'Hide labels on mouse over': 'Hide labels on mouse over'
'Except the hovered app': '除了悬停的应用' 'Except the hovered app': 'Except the hovered app'
'Search': '搜索' 'Search': 'Search'
'Toggle menu': '切换菜单' 'Toggle menu': 'Toggle menu'
'Open the documentation': '打开文档' 'Open the documentation': 'Open the documentation'
'Ask the developer': '询问开发者' 'Ask the developer': 'Ask the developer'
'New request': '新请求' 'New request': 'New request'
'Report a bug': '报告错误' 'Report a bug': 'Report a bug'
'Show the configuration': '显示配置' 'Show the configuration': 'Show the configuration'
'Configuration:': '配置:' 'Configuration:': 'Configuration:'
'Done!': '完成!' 'Done!': 'Done!'
'Copy': '复制' 'Copy': 'Copy'
'Need help': '需要帮助' 'Need help': 'Need help'
'I would like a new feature': '我想要一个新功能' 'I would like a new feature': 'I would like a new feature'
'Something went wrong': '出了点问题' 'Something went wrong': 'Something went wrong'
'Select apps': '选择应用' 'Select apps': 'Select apps'
'Sort': '排序' 'Sort': 'Sort'
'Customize': '自定义' 'Customize': 'Customize'
'Custom': '自定义' 'Custom': 'Custom'
'Close': '关闭' 'Close': 'Close'

View file

@ -17,8 +17,6 @@
import './scss/menu.scss' import './scss/menu.scss'
import '@formatjs/intl-segmenter/polyfill.js'
import { createApp } from 'vue' import { createApp } from 'vue'
import { createPinia } from 'pinia' import { createPinia } from 'pinia'
import { createElement, waitContainer } from './lib/dom.js' import { createElement, waitContainer } from './lib/dom.js'

View file

@ -33,7 +33,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
:data-app-id="app.id" :data-app-id="app.id"
class="app-menu-entry" class="app-menu-entry"
:class="{ :class="{
'app-menu-entry__active': app.id === activeApp, 'app-menu-entry__active': app.active,
'app-menu-entry__hidden-label': hiddenLabels === 1, 'app-menu-entry__hidden-label': hiddenLabels === 1,
'app-menu-main__show-hovered': hiddenLabels === 2, 'app-menu-main__show-hovered': hiddenLabels === 2,
}" }"
@ -44,7 +44,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
:class="{ 'has-unread': app.unread > 0 }" :class="{ 'has-unread': app.unread > 0 }"
:aria-label="app.name" :aria-label="app.name"
:target="targetBlankApps.indexOf(app.id) !== -1 ? '_blank' : undefined" :target="targetBlankApps.indexOf(app.id) !== -1 ? '_blank' : undefined"
:aria-current="app.id === activeApp ? 'page' : false" :aria-current="app.active ? 'page' : false"
> >
<img <img
:src="app.icon" :src="app.icon"
@ -69,7 +69,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
v-for="app in popoverAppList" v-for="app in popoverAppList"
:key="app.id" :key="app.id"
:aria-label="app.name" :aria-label="app.name"
:aria-current="app.id === activeApp ? 'page' : false" :aria-current="app.active ? 'page' : false"
:href="app.href" :href="app.href"
:style="makeStyle(app)" :style="makeStyle(app)"
class="cm-standardmenu-app-menu-popover-entry app-menu-popover-entry" class="cm-standardmenu-app-menu-popover-entry app-menu-popover-entry"
@ -101,7 +101,6 @@ import { ref, onMounted } from 'vue'
import { useConfigStore } from '../store/config.js' import { useConfigStore } from '../store/config.js'
import { useNavStore } from '../store/nav.js' import { useNavStore } from '../store/nav.js'
import { NcActions, NcActionLink } from '@nextcloud/vue' import { NcActions, NcActionLink } from '@nextcloud/vue'
import { getActiveAppId } from '../lib/app.js'
const navStore = useNavStore() const navStore = useNavStore()
const configStore = useConfigStore() const configStore = useConfigStore()
@ -113,7 +112,6 @@ const topMenuApps = ref([])
const appsOrder = ref([]) const appsOrder = ref([])
const mainAppList = ref([]) const mainAppList = ref([])
const popoverAppList = ref([]) const popoverAppList = ref([])
const activeApp = ref(null)
let resizeTimeout = null let resizeTimeout = null
const setApps = (value) => { const setApps = (value) => {
@ -172,7 +170,6 @@ onMounted(async () => {
hiddenLabels.value = config['top-menu-mouse-over-hidden-label'] hiddenLabels.value = config['top-menu-mouse-over-hidden-label']
topMenuApps.value = config['top-menu-apps'] topMenuApps.value = config['top-menu-apps']
appsOrder.value = config['apps-order'] appsOrder.value = config['apps-order']
activeApp.value = getActiveAppId()
ready.value = true ready.value = true
setApps(await navStore.getCoreApps()) setApps(await navStore.getCoreApps())

View file

@ -41,7 +41,10 @@ export const useNavStore = defineStore('nav', () => {
async function getCoreApps() { async function getCoreApps() {
if (coreApps == null) { if (coreApps == null) {
coreApps = await await axios.get(generateUrl('/apps/side_menu/core/apps')).then((response) => response.data.items) coreApps = await axios
.get(generateOcsUrl('core/navigation', 2) + '/apps?format=json')
.then((response) => response.data)
.then((value) => value.ocs.data)
} }
return coreApps return coreApps

View file

@ -17,8 +17,6 @@
import './scss/admin.scss' import './scss/admin.scss'
import '@formatjs/intl-segmenter/polyfill.js'
import { createApp } from 'vue' import { createApp } from 'vue'
import { createPinia } from 'pinia' import { createPinia } from 'pinia'
import { waitContainer } from './lib/dom.js' import { waitContainer } from './lib/dom.js'

View file

@ -38,7 +38,7 @@ body[data-theme-light], body[data-theme-light-highcontrast] {
<?php if ($_['opener-only']) { ?> <?php if ($_['opener-only']) { ?>
#nextcloud { #nextcloud {
display: none !important; display: none;
} }
<?php } ?> <?php } ?>

View file

@ -77,10 +77,6 @@ module.exports = {
new webpack.ProvidePlugin({ new webpack.ProvidePlugin({
Buffer: ['buffer', 'Buffer'], Buffer: ['buffer', 'Buffer'],
}), }),
new webpack.DefinePlugin({
appName: JSON.stringify(appName),
}),
], ],
resolve: { resolve: {