Compare commits

..

2 Commits

Author SHA1 Message Date
Simon Vieille 978b7da7ca fix changelog 2025-05-26 18:51:20 +02:00
Simon Vieille 8bb8a94d8c fix #434: move admin navigation opener to the right 2025-05-26 18:49:21 +02:00
36 changed files with 376 additions and 10173 deletions
+4
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
+130 -539
View File
File diff suppressed because it is too large Load Diff
+1 -1
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.
+3 -3
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>6.1.0</version> <version>5.1.1</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>
@@ -52,8 +52,8 @@ 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_big_menu.png]]></screenshot> <screenshot><![CDATA[https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/nc25_big_menu.png]]></screenshot>
<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.5" /> <php min-version="8.1" max-version="8.4" />
<nextcloud min-version="34" max-version="34"/> <nextcloud min-version="31" max-version="32"/>
</dependencies> </dependencies>
<settings> <settings>
<admin>OCA\SideMenu\Settings\Admin</admin> <admin>OCA\SideMenu\Settings\Admin</admin>
+7 -10
View File
@@ -6,7 +6,6 @@ use OC\AllConfig;
use OC\App\AppStore\Fetcher\CategoryFetcher; use OC\App\AppStore\Fetcher\CategoryFetcher;
use OC\AppFramework\Http\Request; use OC\AppFramework\Http\Request;
use OC\Security\CSP\ContentSecurityPolicyNonceManager; use OC\Security\CSP\ContentSecurityPolicyNonceManager;
use OC\Security\CSRF\CsrfTokenManager;
use OC\User\User; use OC\User\User;
use OCA\SideMenu\Service\AppRepository; use OCA\SideMenu\Service\AppRepository;
use OCA\SideMenu\Service\CategoryRepository; use OCA\SideMenu\Service\CategoryRepository;
@@ -20,11 +19,8 @@ use OCP\AppFramework\Bootstrap\IRegistrationContext;
use OCP\EventDispatcher\IEventDispatcher; use OCP\EventDispatcher\IEventDispatcher;
use OCP\IConfig; use OCP\IConfig;
use OCP\INavigationManager; use OCP\INavigationManager;
use OCP\IRequest;
use OCP\IURLGenerator;
use OCP\IUserSession; use OCP\IUserSession;
use OCP\L10N\IFactory; use OCP\L10N\IFactory;
use OCP\Server;
use OCP\Util; use OCP\Util;
use Psr\Container\ContainerInterface; use Psr\Container\ContainerInterface;
@@ -38,9 +34,9 @@ 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 IConfig $config; protected AllConfig $config;
protected ContentSecurityPolicyNonceManager $cspnm; protected ContentSecurityPolicyNonceManager $cspnm;
protected IRequest $request; protected Request $request;
protected ?User $user = null; protected ?User $user = null;
public function __construct(array $urlParams = []) public function __construct(array $urlParams = [])
@@ -87,9 +83,10 @@ class Application extends App implements IBootstrap
public function boot(IBootContext $context): void public function boot(IBootContext $context): void
{ {
$this->config = Server::get(IConfig::class); $this->config = \OC::$server->getConfig();
$this->user = Server::get(IUserSession::class)->getUser(); $this->cspnm = \OC::$server->getContentSecurityPolicyNonceManager();
$this->request = Server::get(IRequest::class); $this->user = \OC::$server[IUserSession::class]->getUser();
$this->request = \OC::$server->getRequest();
if (!$this->isEnabled()) { if (!$this->isEnabled()) {
return; return;
@@ -141,7 +138,7 @@ class Application extends App implements IBootstrap
$cache = $this->config->getAppValue(self::APP_ID, 'cache', '0'); $cache = $this->config->getAppValue(self::APP_ID, 'cache', '0');
foreach ($assets as $value) { foreach ($assets as $value) {
$route = Server::get(IURLGenerator::class)->linkToRoute( $route = \OC::$server->getURLGenerator()->linkToRoute(
$value['route'], $value['route'],
['v' => $cache] ['v' => $cache]
); );
+1 -13
View File
@@ -97,7 +97,6 @@ class AdminSettingController extends Controller
'use-avatar', 'use-avatar',
'add-logo-link', 'add-logo-link',
'show-settings', 'show-settings',
'show-search-form',
'loader-enabled', 'loader-enabled',
'always-displayed', 'always-displayed',
'enabled', 'enabled',
@@ -138,7 +137,6 @@ class AdminSettingController extends Controller
'use-avatar' => '0', 'use-avatar' => '0',
'add-logo-link' => '1', 'add-logo-link' => '1',
'show-settings' => '0', 'show-settings' => '0',
'show-search-form' => '1',
'loader-enabled' => '1', 'loader-enabled' => '1',
'always-displayed' => '0', 'always-displayed' => '0',
'enabled' => '1', 'enabled' => '1',
@@ -208,17 +206,7 @@ class AdminSettingController extends Controller
} }
foreach ($defaults as $key => $default) { foreach ($defaults as $key => $default) {
if (array_key_exists($key, $config)) { if (!array_key_exists($key, $config)) {
continue;
}
if (in_array($key, $booleans)) {
$config[$key] = $default === '1';
} elseif (in_array($key, $arrays)) {
$config[$key] = json_decode($default);
} elseif (in_array($key, $integers)) {
$config[$key] = (int) $default;
} else {
$config[$key] = $default; $config[$key] = $default;
} }
} }
+15 -16
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'),
@@ -135,7 +135,6 @@ class JsController extends Controller
'force-light-icon' => $this->config->getAppValueBool('force-light-icon', '0'), 'force-light-icon' => $this->config->getAppValueBool('force-light-icon', '0'),
'display-logo' => $this->config->getAppValueBool('display-logo', '1'), 'display-logo' => $this->config->getAppValueBool('display-logo', '1'),
'use-avatar' => $this->config->getAppValueBool('use-avatar', '0'), 'use-avatar' => $this->config->getAppValueBool('use-avatar', '0'),
'show-search-form' => $this->config->getAppValueBool('show-search-form', '1'),
'hide-when-no-apps' => $this->config->getAppValueBool('hide-when-no-apps', '0'), 'hide-when-no-apps' => $this->config->getAppValueBool('hide-when-no-apps', '0'),
'loader-enabled' => $this->config->getAppValueBool('loader-enabled', '1'), 'loader-enabled' => $this->config->getAppValueBool('loader-enabled', '1'),
'always-displayed' => $this->config->getAppValueBool('always-displayed', '0'), 'always-displayed' => $this->config->getAppValueBool('always-displayed', '0'),
+1 -6
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'];
-9300
View File
File diff suppressed because it is too large Load Diff
+1 -2
View File
@@ -11,9 +11,8 @@
}, },
"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.9.0", "@nextcloud/vue": "^9.0.0-alpha.8",
"node-polyfill-webpack-plugin": "^4.1.0", "node-polyfill-webpack-plugin": "^4.1.0",
"pinia": "^3.0.1", "pinia": "^3.0.1",
"postcss": "^7.0.0 || ^8.0.1", "postcss": "^7.0.0 || ^8.0.1",
-2
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'
+2 -2
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()
}, },
+2 -2
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',
+13 -14
View File
@@ -94,19 +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'
'Show the search form': 'Show the search form'
-1
View File
@@ -109,4 +109,3 @@
'Customize': 'Customize' 'Customize': 'Customize'
'Custom': 'Custom' 'Custom': 'Custom'
'Close': 'Close' 'Close': 'Close'
'Show the search form': 'Show the search form'
+13 -14
View File
@@ -94,19 +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'
'Show the search form': 'Show the search form'
+1 -2
View File
@@ -1,4 +1,4 @@
'Custom menu': 'Menu personnalisé' 'Custom menu': '­­­Menu personnalisé'
'Enable the custom menu': 'Activer le menu personnalisé' 'Enable the custom menu': 'Activer le menu personnalisé'
'No': 'Non' 'No': 'Non'
'Yes': 'Oui' 'Yes': 'Oui'
@@ -128,4 +128,3 @@
'Customize': 'Personnaliser' 'Customize': 'Personnaliser'
'Custom': 'Personnalisé' 'Custom': 'Personnalisé'
'Close': 'Fermer' 'Close': 'Fermer'
'Show the search form': 'Afficher le formulaire de recherche'
+16 -17
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,19 +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'
'Show the search form': 'Show the search form'
-1
View File
@@ -109,4 +109,3 @@
'Customize': 'Customize' 'Customize': 'Customize'
'Custom': 'Custom' 'Custom': 'Custom'
'Close': 'Close' 'Close': 'Close'
'Show the search form': 'Show the search form'
-1
View File
@@ -107,4 +107,3 @@
'Customize': 'Customize' 'Customize': 'Customize'
'Custom': 'Custom' 'Custom': 'Custom'
'Close': 'Close' 'Close': 'Close'
'Show the search form': 'Show the search form'
+2 -3
View File
@@ -1,4 +1,4 @@
'Custom menu': 'Пользовательское меню' 'Custom menu': 'Custom menu'
'Enable the custom menu': 'Включить пользовательское меню' 'Enable the custom menu': 'Включить пользовательское меню'
'No': 'Нет' 'No': 'Нет'
'Yes': 'Да' 'Yes': 'Да'
@@ -77,7 +77,7 @@
'Customize sorting': 'Настроить сортировку' 'Customize sorting': 'Настроить сортировку'
'Order by': 'В порядке' 'Order by': 'В порядке'
'Name': 'Название' 'Name': 'Название'
'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': 'Цвета тёмной темы'
@@ -109,4 +109,3 @@
'Customize': 'Приспособить' 'Customize': 'Приспособить'
'Custom': 'Custom' 'Custom': 'Custom'
'Close': 'Закрыть' 'Close': 'Закрыть'
'Show the search form': 'Show the search form'
-1
View File
@@ -107,4 +107,3 @@
'Customize': 'Customize' 'Customize': 'Customize'
'Custom': 'Custom' 'Custom': 'Custom'
'Close': 'Close' 'Close': 'Close'
'Show the search form': 'Show the search form'
+111 -112
View File
@@ -1,112 +1,111 @@
'Custom menu': 'Anpassad meny' 'Custom menu': ''
'Enable the custom menu': 'Aktivera den anpassade menyn' 'Enable the custom menu': ''
'No': 'Nej' 'No': ''
'Yes': 'Ja' 'Yes': ''
'Menu': 'Meny' 'Menu': ''
'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.' 'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.': ''
'Top menu': 'Toppmeny' 'Top menu': ''
'Apps that not must be moved in the side menu': 'Appar som inte får flyttas i sidomenyn' 'Apps that not must be moved in the side menu': ''
'If there is no selection then the global configuration is applied.': 'Om inget val har gjorts tillämpas den globala konfigurationen.' 'If there is no selection then the global configuration is applied.': ''
'Experimental': 'Experimentell' 'Experimental': ''
'Save': 'Spara' 'Save': ''
'You like this app and you want to support me?': 'Gillar du den här appen och vill stödja mig?' 'You like this app and you want to support me?': ''
'Buy me a coffee ☕': 'Bjud mig på en kaffe ☕' 'Buy me a coffee ☕': ''
'Hidden': 'Dold' 'Hidden': ''
'Small': 'Liten' 'Small': ''
'Normal': 'Normal' 'Normal': ''
'Big': 'Stor' 'Big': ''
'Hidden icon': 'Dold ikon' 'Hidden icon': ''
'Small icon': 'Liten ikon' 'Small icon': ''
'Normal icon': 'Normal ikon' 'Normal icon': ''
'Big icon': 'Stor ikon' 'Big icon': ''
'Hidden text': 'Dold text' 'Hidden text': ''
'Small text': 'Liten text' 'Small text': ''
'Normal text': 'Normal text' 'Normal text': ''
'Big text': 'Stor text' 'Big text': ''
'Colors': 'Färger' 'Colors': ''
'Background color': 'Bakgrundsfärg' 'Background color': ''
'Background color of current app': 'Bakgrundsfärg för aktuell app' 'Background color of current app': ''
'Text color': 'Textfärg' 'Text color': ''
'Loader': 'Laddare' 'Loader': ''
'Icon': 'Ikon' 'Icon': ''
'Same color': 'Samma färg' 'Same color': ''
'Opposite color': 'Motsatt färg' 'Opposite color': ''
'Transparent': 'Transparent' 'Transparent': ''
'Opaque': 'Ogenomskinlig' 'Opaque': ''
'Opener': 'Öppnare' 'Opener': ''
'Default': 'Standard' 'Default': ''
'Default (dark)': 'Standard(mörk)' 'Default (dark)': ''
'Hamburger': 'Hamburgermeny' 'Hamburger': ''
'Hamburger (dark)': 'Hamburgermeny(mörk)' 'Hamburger (dark)': ''
'Hamburger 2': 'Hamburgermeny 2' 'Hamburger 2': ''
'Hamburger 2 (dark)': 'Hamburgermeny 2 (mörk)' 'Hamburger 2 (dark)': ''
'Before the logo': 'Före logotypen' 'Before the logo': ''
'After the logo': 'Efter logotypen' 'After the logo': ''
'Position': 'Position' 'Position': ''
'Show only the opener (hidden logo)': 'Visa endast öppnaren (gömd logotyp)' 'Show only the opener (hidden logo)': ''
'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).' 'Do not display the side menu and the opener if there is no application (eg: public pages).': ''
'Panel': '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)' 'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': ''
'Display the big menu': 'Visa den stora menyn' 'Display the big menu': ''
'Display the logo': 'Visa logotypen' 'Display the logo': ''
'Icons and texts': 'Ikoner och texter' 'Icons and texts': ''
'Loader enabled': 'Laddare aktiverad' 'Loader enabled': ''
'Tips': 'Tips' 'Tips': ''
'Always displayed': 'Alltid visad' 'Always displayed': ''
'This is the automatic behavior when the menu is always displayed.': 'Detta är det automatiska beteendet när menyn alltid är visad.' 'This is the automatic behavior when the menu is always displayed.': ''
'Not compatible with touch screens.': 'Inte kompatibel med pekskärmar.' 'Not compatible with touch screens.': ''
'Big menu': 'Stor meny' 'Big menu': ''
'Live preview': 'Förhandsgranskning i realtid' 'Live preview': ''
'Open apps in new tab': 'Öppna appar i ny flik' 'Open apps in new tab': ''
'Use the global setting': 'Använd den globala inställningen' 'Use the global setting': ''
'Use my selection': 'Använd mitt val' 'Use my selection': ''
'Show and hide the list of applications': 'Visa och dölj listan över applikationer' 'Show and hide the list of applications': ''
'Use the avatar instead of the logo': 'Använd avataren istället för logotypen' 'Use the avatar instead of the logo': ''
'You do not have permission to change the settings.': 'Du har inte behörighet att ändra inställningarna.' 'You do not have permission to change the settings.': ''
'Force this configuration to users': 'Tvinga denna konfiguration för användare' 'Force this configuration to users': ''
'Export the configuration': 'Exportera konfigurationen' 'Export the configuration': ''
'Purge the cache': 'Rensa cachen' 'Purge the cache': ''
'Show the link to settings': 'Visa länken till inställningarna' 'Show the link to settings': ''
'The menu is enabled by default for users': 'Menyn är aktiverad som standard för användare' 'The menu is enabled by default for users': ''
'Except when the configuration is forced.': 'Förutom när konfigurationen är tvingad.' 'Except when the configuration is forced.': ''
'Apps that should not be displayed in the menu': 'Appar som inte ska visas i menyn' 'Apps that should not be displayed in the menu': ''
'This feature is only compatible with the <code>big menu</code> display.': 'Denna funktion är endast kompatibel med <code>stor meny</code>.' 'This feature is only compatible with the <code>big menu</code> display.': ''
'The logo is a link to the default app': 'Logotypen är en länk till standardappen' 'The logo is a link to the default app': ''
'Others': 'Övriga' 'Others': ''
'Categories': 'Kategorier' 'Categories': ''
'Customize sorting': 'Anpassa sortering' 'Customize sorting': ''
'Order by': 'Sortera efter' 'Order by': ''
'Name': 'Namn' 'Name': ''
'Customed': 'Anpassad' 'Customed': ''
'Show and hide the list of categories': 'Visa och dölj listan över kategorier' 'Show and hide the list of categories': ''
'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.' 'This parameters are used when Dark theme or Breeze Dark Theme are enabled.': ''
'Dark mode colors': 'Färger för mörkt läge' 'Dark mode colors': ''
'With categories': 'Med kategorier' 'With categories': ''
'Custom categories': 'Anpassade kategorier' 'Custom categories': ''
'Customize application categories': 'Anpassa app kategorier' 'Customize application categories': ''
'Reset to default': 'Återställ till standardvärden' 'Reset to default': ''
'Applications': 'Applikationer' 'Applications': ''
'Applications kept in the top menu': 'Applikationer som hålls i toppmenyn' 'Applications kept in the top menu': ''
'Applications kept in the top menu but also shown in side menu': 'Applikationer som visas både i toppmenyn och i sidomenyn' 'Applications kept in the top menu but also shown in side menu': ''
'These applications must be selected in the previous option.': 'Dessa applikationer måste väljas i föregående alternativ.' 'These applications must be selected in the previous option.': ''
'Hide labels on mouse over': 'Dölj etiketter när muspekaren är över' 'Hide labels on mouse over': ''
'Except the hovered app': 'Förutom den app som muspekaren är över' 'Except the hovered app': ''
'Search': 'Sök' 'Search': ''
'Toggle the menu': 'Växla menyn' 'Toggle the menu': ''
'Open the documentation': 'Öppna dokumentationen' 'Open the documentation': ''
'Ask the developer': 'Fråga utvecklaren' 'Ask the developer': ''
'New request': 'Ny förfrågan' 'New request': ''
'Report a bug': 'Rapportera ett fel' 'Report a bug': ''
'Show the configuration': 'Visa konfigurationen' 'Show the configuration': ''
'Configuration:': 'Konfiguration:' 'Configuration:': ''
'Done!': 'Klar!' 'Done!': ''
'Copy': 'Kopiera' 'Copy': ''
'Need help': 'Behöver hjälp' 'Need help': ''
'I would like a new feature': 'Jag skulle vilja ha en ny funktion' 'I would like a new feature': ''
'Something went wrong': 'Något gick fel' 'Something went wrong': ''
'Select apps': 'Välj appar' 'Select apps': ''
'Sort': 'Sortera' 'Sort': ''
'Customize': 'Anpassa' 'Customize': ''
'Custom': 'Anpassad' 'Custom': ''
'Close': 'Stäng' 'Close': ''
'Show the search form': 'Show the search form'
-1
View File
@@ -109,4 +109,3 @@
'Customize': 'Customize' 'Customize': 'Customize'
'Custom': 'Custom' 'Custom': 'Custom'
'Close': 'Close' 'Close': 'Close'
'Show the search form': 'Show the search form'
+1 -2
View File
@@ -38,7 +38,7 @@
'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': '图标和文本'
@@ -109,4 +109,3 @@
'Customize': '自定义' 'Customize': '自定义'
'Custom': '自定义' 'Custom': '自定义'
'Close': '关闭' 'Close': '关闭'
'Show the search form': 'Show the search form'
-2
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'
+1 -3
View File
@@ -27,7 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
:label="settings.name" :label="settings.name"
:avatar="settings.avatar" :avatar="settings.avatar"
/> />
<AppSearch v-if="showSearchForm" v-model="search" /> <AppSearch v-model="search" />
<OpenerButton <OpenerButton
v-if="!openerHover" v-if="!openerHover"
@click="$emit('close')" @click="$emit('close')"
@@ -102,7 +102,6 @@ const activeApp = ref(null)
const targetBlankApps = ref([]) const targetBlankApps = ref([])
const settings = ref(null) const settings = ref(null)
const search = ref('') const search = ref('')
const showSearchForm = ref(true)
const openerHover = ref(false) const openerHover = ref(false)
const menu = useTemplateRef('menu') const menu = useTemplateRef('menu')
const isTouchDevice = window.matchMedia('(pointer: coarse)').matches const isTouchDevice = window.matchMedia('(pointer: coarse)').matches
@@ -121,7 +120,6 @@ onMounted(async () => {
targetBlankApps.value = config['target-blank-apps'] targetBlankApps.value = config['target-blank-apps']
settings.value = config['settings'] settings.value = config['settings']
showSearchForm.value = config['show-search-form']
openerHover.value = config['opener-hover'] && !isTouchDevice openerHover.value = config['opener-hover'] && !isTouchDevice
items.value = await navStore.getCategories() items.value = await navStore.getCategories()
+1 -3
View File
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
:avatar="settings.avatar" :avatar="settings.avatar"
/> />
<AppSearch <AppSearch
v-if="showSearchForm && open" v-if="open"
v-model="search" v-model="search"
/> />
<OpenerButton <OpenerButton
@@ -103,7 +103,6 @@ const openerHover = ref(false)
const alwaysDisplayed = ref(false) const alwaysDisplayed = ref(false)
const displayLogo = ref(false) const displayLogo = ref(false)
const useAvatarAsLogo = ref(false) const useAvatarAsLogo = ref(false)
const showSearchForm = ref(true)
const search = ref('') const search = ref('')
const apps = ref([]) const apps = ref([])
const menu = useTemplateRef('menu') const menu = useTemplateRef('menu')
@@ -152,7 +151,6 @@ onMounted(async () => {
alwaysDisplayed.value = config['always-displayed'] alwaysDisplayed.value = config['always-displayed']
targetBlankApps.value = config['target-blank-apps'] targetBlankApps.value = config['target-blank-apps']
forceLightIcon.value = config['force-light-icon'] forceLightIcon.value = config['force-light-icon']
showSearchForm.value = config['show-search-form']
avatar.value = config['avatar'] avatar.value = config['avatar']
logo.value = config['logo'] logo.value = config['logo']
+12 -17
View File
@@ -62,9 +62,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
</li> </li>
</ul> </ul>
<NcActions <NcActions
class="cm-standardmenu-app-menu-more" class="cm-standardmenu-app-menu-more app-menu-more"
:aria-label="t('core', 'More apps')" :aria-label="t('core', 'More apps')"
:forceMenu="true"
> >
<NcActionLink <NcActionLink
v-for="app in popoverAppList" v-for="app in popoverAppList"
@@ -133,27 +132,19 @@ const setApps = (value) => {
const appLimit = () => { const appLimit = () => {
const headerStart = document.querySelector('#header .header-start') const headerStart = document.querySelector('#header .header-start')
const headerEnd = document.querySelector('#header .header-end') const headerEnd = document.querySelector('#header .header-end')
const unifiedSearch = document.querySelector('#header .unified-search-input')
const body = document.querySelector('body') const body = document.querySelector('body')
let totalWidth = body.offsetWidth let size = (headerEnd ? headerEnd.offsetWidth : 0) + 70
let otherElementsWidth = headerEnd ? headerEnd.offsetWidth : 0
if (unifiedSearch && headerEnd.offsetWidth < unifiedSearch.offsetWidth) {
otherElementsWidth += unifiedSearch.offsetWidth
}
let maxWidth = body.offsetWidth - otherElementsWidth
if (headerStart) { if (headerStart) {
Array.from(headerStart.children).forEach((child) => { Array.from(headerStart.children).forEach((child) => {
if (child.id !== 'app-menu-container') { if (child.id !== 'app-menu-container') {
maxWidth -= child.offsetWidth size += child.offsetWidth
} }
}) })
} }
return Math.max(0, Math.floor(maxWidth / 60)) return Math.max(0, Math.floor((body.offsetWidth - size) / 70))
} }
const makeStyle = (app) => { const makeStyle = (app) => {
@@ -165,9 +156,13 @@ const makeStyle = (app) => {
} }
const computeLists = () => { const computeLists = () => {
const limit = appLimit() mainAppList.value = appList.value.slice(0, appLimit())
mainAppList.value = appList.value.slice(0, limit) popoverAppList.value = appList.value.slice(appLimit()).sort((a, b) => a.order - b.order)
popoverAppList.value = appList.value.slice(limit).sort((a, b) => a.order - b.order) }
const reComputeLists = (delay) => {
window.clearTimeout(resizeTimeout)
resizeTimeout = window.setTimeout(computeLists, delay || 100)
} }
onMounted(async () => { onMounted(async () => {
@@ -182,7 +177,7 @@ onMounted(async () => {
setApps(await navStore.getCoreApps()) setApps(await navStore.getCoreApps())
window.setInterval(computeLists, 100) window.addEventListener('resize', reComputeLists)
}) })
</script> </script>
+1 -3
View File
@@ -31,7 +31,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
:label="settings.name" :label="settings.name"
:avatar="settings.avatar" :avatar="settings.avatar"
/> />
<AppSearch v-if="showSearchForm" v-model="search" /> <AppSearch v-model="search" />
<OpenerButton <OpenerButton
v-if="!openerHover" v-if="!openerHover"
@click="$emit('close')" @click="$emit('close')"
@@ -107,7 +107,6 @@ const activeApp = ref(null)
const targetBlankApps = ref([]) const targetBlankApps = ref([])
const settings = ref(null) const settings = ref(null)
const search = ref('') const search = ref('')
const showSearchForm = ref(true)
const openerHover = ref(false) const openerHover = ref(false)
const menu = useTemplateRef('menu') const menu = useTemplateRef('menu')
const isTouchDevice = window.matchMedia('(pointer: coarse)').matches const isTouchDevice = window.matchMedia('(pointer: coarse)').matches
@@ -126,7 +125,6 @@ onMounted(async () => {
targetBlankApps.value = config['target-blank-apps'] targetBlankApps.value = config['target-blank-apps']
settings.value = config['settings'] settings.value = config['settings']
showSearchForm.value = config['show-search-form']
openerHover.value = config['opener-hover'] && !isTouchDevice openerHover.value = config['opener-hover'] && !isTouchDevice
items.value = await navStore.getCategories() items.value = await navStore.getCategories()
-15
View File
@@ -29,8 +29,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/> />
</NcAppNavigation> </NcAppNavigation>
<NcAppContent class="cm-settings cm-settings--nav"> <NcAppContent class="cm-settings cm-settings--nav">
<button @click="toggleNav" class="cm-settings-nav-toggle">{{ trans('Toggle menu') }}</button>
<SettingsSection :hidden="section !== 'panel'"> <SettingsSection :hidden="section !== 'panel'">
<SectionTitle label="Panel" /> <SectionTitle label="Panel" />
@@ -82,15 +80,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<FormYesNo v-model="config['show-settings']" /> <FormYesNo v-model="config['show-settings']" />
</SettingValue> </SettingValue>
</SettingItem> </SettingItem>
<SettingItem :disabled="config['always-displayed']">
<SettingLabel
label="Show the search form"
:middle="true"
/>
<SettingValue>
<FormYesNo v-model="config['show-search-form']" />
</SettingValue>
</SettingItem>
<SettingItem> <SettingItem>
<SettingLabel <SettingLabel
label="Icons" label="Icons"
@@ -630,10 +619,6 @@ const filterConfig = (value) => {
return result return result
} }
const toggleNav = () => {
document.querySelector('.cm-settings-nav .app-navigation-toggle-wrapper > button').click()
}
onMounted(async () => { onMounted(async () => {
config.value = await configStore.getAppConfig() config.value = await configStore.getAppConfig()
+10 -16
View File
@@ -15,25 +15,14 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
.cm-settings-nav {
padding-top: 30px !important;
}
.cm-settings-nav-toggle {
margin-top: 40px !important;
margin-left: 15px !important;
}
.cm-settings-nav .app-navigation-toggle-wrapper > button {
display: none;
}
.cm-settings { .cm-settings {
&-nav { &--nav {
max-width: 50vw !important; padding-top: 30px;
}
&-nav {
.app-navigation__content { .app-navigation__content {
padding: 20px 10px 20px 10px; padding: 20px;
} }
.app-navigation-entry-icon { .app-navigation-entry-icon {
@@ -43,6 +32,11 @@
.app-navigation-entry__name { .app-navigation-entry__name {
padding-left: 10px !important; padding-left: 10px !important;
} }
.app-navigation-toggle-wrapper {
top: calc(var(--app-navigation-padding) - 3px) !important;
inset-inline-end: calc(0px - var(--app-navigation-padding) * 3) !important;
}
} }
&-tips { &-tips {
+14 -44
View File
@@ -363,16 +363,6 @@
right: 0 !important; right: 0 !important;
margin-left: 0 !important; margin-left: 0 !important;
} }
#content {
left: 53px;
width: calc(100% - (var(--body-container-margin) * 2) - 62px);
}
#content-vue {
width: calc(100% - (var(--body-container-margin) * 2) - 60px);
margin-left: 11px;
}
} }
@media screen and (max-width: 1024px) { @media screen and (max-width: 1024px) {
@@ -395,16 +385,6 @@
padding: 10px 0; padding: 10px 0;
} }
} }
#header {
.unified-search-input {
width: 80px !important;
.unified-search-input__label {
display: none;
}
}
}
} }
@media screen and (min-width: 1024px) { @media screen and (min-width: 1024px) {
@@ -490,7 +470,7 @@ $header-icon-size: 20px;
color: var(--color-primary-text); color: var(--color-primary-text);
text-align: center; text-align: center;
left: 50%; left: 50%;
top: 55%; top: 45%;
display: block; display: block;
min-width: 100%; min-width: 100%;
transform: translateX(-50%); transform: translateX(-50%);
@@ -562,28 +542,24 @@ $header-icon-size: 20px;
} }
} }
&-app-menu-more { .app-menu-more .button-vue--vue-tertiary {
padding-top: 9px !important; opacity: 0.7;
margin: 8px 3px 3px 3px;
filter: var(--background-image-invert-if-bright, var(--primary-invert-if-bright));
.button-vue--vue-tertiary { &:not([aria-expanded='true']) {
opacity: 0.7; color: var(--color-main-text);
margin: 8px 3px 3px 3px;
filter: var(--background-image-invert-if-bright, var(--primary-invert-if-bright));
&:not([aria-expanded='true']) { &:hover {
color: var(--color-main-text);
&:hover {
opacity: 1;
background-color: transparent !important;
}
}
&:focus-visible {
opacity: 1; opacity: 1;
outline: none !important; background-color: transparent !important;
} }
} }
&:focus-visible {
opacity: 1;
outline: none !important;
}
} }
&-app-menu-popover-entry { &-app-menu-popover-entry {
@@ -623,9 +599,3 @@ $header-icon-size: 20px;
display: none; display: none;
} }
} }
#header {
.unified-search-input:not(.unified-search-input--mobile) {
position: unset !important;
}
}
-2
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'
+13 -1
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 } ?>
@@ -117,3 +117,15 @@ body[data-theme-light], body[data-theme-light-highcontrast] {
font-size: 16px; font-size: 16px;
} }
<?php } ?> <?php } ?>
<?php if ($_['always-displayed']) { ?>
#content {
left: 53px;
width: calc(100% - (var(--body-container-margin) * 2) - 62px);
}
#content-vue {
width: calc(100% - (var(--body-container-margin) * 2) - 60px);
margin-left: 11px;
}
<?php } ?>
-2
View File
@@ -7,7 +7,6 @@ const NodePolyfillPlugin = require('node-polyfill-webpack-plugin')
const TerserPlugin = require('terser-webpack-plugin') const TerserPlugin = require('terser-webpack-plugin')
const appName = 'side_menu' const appName = 'side_menu'
const appVersion = '6.x'
const buildMode = process.env.NODE_ENV const buildMode = process.env.NODE_ENV
const isDev = buildMode === 'development' const isDev = buildMode === 'development'
@@ -81,7 +80,6 @@ module.exports = {
new webpack.DefinePlugin({ new webpack.DefinePlugin({
appName: JSON.stringify(appName), appName: JSON.stringify(appName),
appVersion: JSON.stringify(appVersion),
}), }),
], ],