Merge branch 'feature/issue147' into develop
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
commit
f09eda85a6
|
@ -163,4 +163,15 @@
|
||||||
position: relative;
|
position: relative;
|
||||||
top: -8px;
|
top: -8px;
|
||||||
left: 5px;
|
left: 5px;
|
||||||
|
transition-duration: 0.8s;
|
||||||
|
transition-property: transform;
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-reset--down {
|
||||||
|
top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-reset--progress {
|
||||||
|
transform: rotate(-359deg);
|
||||||
}
|
}
|
||||||
|
|
|
@ -162,10 +162,10 @@ class JsController extends Controller
|
||||||
'side-with-categories' => $this->config->getAppValueBool('side-with-categories', '0'),
|
'side-with-categories' => $this->config->getAppValueBool('side-with-categories', '0'),
|
||||||
'big-menu' => $this->config->getAppValueBool('big-menu', '0'),
|
'big-menu' => $this->config->getAppValueBool('big-menu', '0'),
|
||||||
'big-menu-hidden-apps' => $this->config->getAppValueArray('big-menu-hidden-apps', '[]'),
|
'big-menu-hidden-apps' => $this->config->getAppValueArray('big-menu-hidden-apps', '[]'),
|
||||||
|
'apps-order' => $this->config->getAppValueArray('apps-order', '[]'),
|
||||||
'avatar' => $avatar,
|
'avatar' => $avatar,
|
||||||
'top-menu-apps' => $topMenuApps,
|
'top-menu-apps' => $topMenuApps,
|
||||||
'top-side-menu-apps' => $topSideMenuApps,
|
'top-side-menu-apps' => $topSideMenuApps,
|
||||||
'top-menu-apps-order' => $topMenuAppsOrder,
|
|
||||||
'target-blank-apps' => $targetBlankApps,
|
'target-blank-apps' => $targetBlankApps,
|
||||||
'settings' => $settings,
|
'settings' => $settings,
|
||||||
'logo' => $this->themingDefaults->getLogo(),
|
'logo' => $this->themingDefaults->getLogo(),
|
||||||
|
|
|
@ -93,7 +93,7 @@ class NavController extends Controller
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$apps = $this->appRepository->getVisibleApps();
|
$apps = $this->appRepository->getOrderedApps();
|
||||||
$categoriesLabels = $this->categoryRepository->getOrderedCategories();
|
$categoriesLabels = $this->categoryRepository->getOrderedCategories();
|
||||||
$hiddenApps = $this->config->getAppValueArray('big-menu-hidden-apps', '[]');
|
$hiddenApps = $this->config->getAppValueArray('big-menu-hidden-apps', '[]');
|
||||||
$isForced = $this->config->getAppValueBool('force', '0');
|
$isForced = $this->config->getAppValueBool('force', '0');
|
||||||
|
@ -178,10 +178,6 @@ class NavController extends Controller
|
||||||
foreach ($items as $category => $value) {
|
foreach ($items as $category => $value) {
|
||||||
if (empty($items[$category]['apps'])) {
|
if (empty($items[$category]['apps'])) {
|
||||||
unset($items[$category]);
|
unset($items[$category]);
|
||||||
} else {
|
|
||||||
uasort($items[$category]['apps'], function ($a, $b) {
|
|
||||||
return ($a['name'] < $b['name']) ? -1 : 1;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -98,10 +98,6 @@ class AppRepository
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
usort($visibleApps, function ($a, $b) {
|
|
||||||
return ($a['name'] < $b['name']) ? -1 : 1;
|
|
||||||
});
|
|
||||||
|
|
||||||
return $visibleApps;
|
return $visibleApps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,10 +110,10 @@ class AppRepository
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTopMenuOrderedApps()
|
public function getOrderedApps()
|
||||||
{
|
{
|
||||||
$apps = $this->getVisibleApps();
|
$apps = $this->getVisibleApps();
|
||||||
$orders = $this->config->getAppValueArray('top-menu-apps-order', '[]');
|
$orders = $this->config->getAppValueArray('apps-order', '[]');
|
||||||
|
|
||||||
usort($apps, function ($a, $b) use ($orders) {
|
usort($apps, function ($a, $b) use ($orders) {
|
||||||
$ak = array_keys($orders, $a['id'])[0] ?? null;
|
$ak = array_keys($orders, $a['id'])[0] ?? null;
|
||||||
|
|
|
@ -159,11 +159,11 @@ class Admin implements ISettings
|
||||||
'force' => $this->config->getAppValue('force', '0'),
|
'force' => $this->config->getAppValue('force', '0'),
|
||||||
'target-blank-apps' => $this->config->getAppValueArray('target-blank-apps', '[]'),
|
'target-blank-apps' => $this->config->getAppValueArray('target-blank-apps', '[]'),
|
||||||
'top-menu-apps' => $this->config->getAppValueArray('top-menu-apps', '[]'),
|
'top-menu-apps' => $this->config->getAppValueArray('top-menu-apps', '[]'),
|
||||||
'top-menu-apps-order' => $this->config->getAppValueArray('top-menu-apps-order', '[]'),
|
'apps-order' => $this->config->getAppValueArray('apps-order', '[]'),
|
||||||
|
'ordered-apps' => $this->appRepository->getOrderedApps(),
|
||||||
'top-side-menu-apps' => $this->config->getAppValueArray('top-side-menu-apps', '[]'),
|
'top-side-menu-apps' => $this->config->getAppValueArray('top-side-menu-apps', '[]'),
|
||||||
'default-enabled' => $this->config->getAppValue('default-enabled', '1'),
|
'default-enabled' => $this->config->getAppValue('default-enabled', '1'),
|
||||||
'apps' => $this->appRepository->getVisibleApps(),
|
'apps' => $this->appRepository->getVisibleApps(),
|
||||||
'top-menu-ordered-apps' => $this->appRepository->getTopMenuOrderedApps(),
|
|
||||||
'apps-categories-custom' => $this->config->getAppValueArray('apps-categories-custom', '[]'),
|
'apps-categories-custom' => $this->config->getAppValueArray('apps-categories-custom', '[]'),
|
||||||
'categories-order-type' => $this->config->getAppValue('categories-order-type', 'default'),
|
'categories-order-type' => $this->config->getAppValue('categories-order-type', 'default'),
|
||||||
'categories-order' => $this->config->getAppValueArray('categories-order', '[]'),
|
'categories-order' => $this->config->getAppValueArray('categories-order', '[]'),
|
||||||
|
|
|
@ -82,7 +82,7 @@ export default {
|
||||||
this.apps = {}
|
this.apps = {}
|
||||||
let orders = {}
|
let orders = {}
|
||||||
|
|
||||||
Array.from(window.topMenuAppsOrder).forEach((app, order) => {
|
window.menuAppsOrder.forEach((app, order) => {
|
||||||
orders[app] = order + 1
|
orders[app] = order + 1
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
16
src/admin.js
16
src/admin.js
|
@ -159,9 +159,15 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||||
const target = event.target
|
const target = event.target
|
||||||
const values = JSON.parse(target.getAttribute('data-reset'))
|
const values = JSON.parse(target.getAttribute('data-reset'))
|
||||||
|
|
||||||
|
target.classList.toggle('btn-reset--progress', true)
|
||||||
|
|
||||||
for (let i in values) {
|
for (let i in values) {
|
||||||
document.querySelector(`#${i}`).value = values[i]
|
document.querySelector(`#${i}`).value = values[i]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window.setTimeout(() => {
|
||||||
|
target.classList.toggle('btn-reset--progress', false)
|
||||||
|
}, 800)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,7 +255,6 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||||
let value = []
|
let value = []
|
||||||
|
|
||||||
for (let item of document.querySelectorAll('#categories-list .side-menu-setting-list-item')) {
|
for (let item of document.querySelectorAll('#categories-list .side-menu-setting-list-item')) {
|
||||||
console.log(item.getAttribute('data-id'))
|
|
||||||
value.push(item.getAttribute('data-id'))
|
value.push(item.getAttribute('data-id'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,20 +263,19 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
sortable('#top-menu-apps-order-list .side-menu-setting-list', {
|
sortable('#apps-order-list .side-menu-setting-list', {
|
||||||
placeholderClass: 'side-menu-setting-list-drop'
|
placeholderClass: 'side-menu-setting-list-drop'
|
||||||
})
|
})
|
||||||
|
|
||||||
try {
|
try {
|
||||||
sortable('#top-menu-apps-order-list .side-menu-setting-list')[0].addEventListener('sortstop', (e) => {
|
sortable('#apps-order-list .side-menu-setting-list')[0].addEventListener('sortstop', (e) => {
|
||||||
let value = []
|
let value = []
|
||||||
|
|
||||||
for (let item of document.querySelectorAll('#top-menu-apps-order-list .side-menu-setting-list-item')) {
|
for (let item of document.querySelectorAll('#apps-order-list .side-menu-setting-list-item')) {
|
||||||
console.log(item.getAttribute('data-id'))
|
|
||||||
value.push(item.getAttribute('data-id'))
|
value.push(item.getAttribute('data-id'))
|
||||||
}
|
}
|
||||||
|
|
||||||
document.querySelector('input[name="top-menu-apps-order"]').value = JSON.stringify(value)
|
document.querySelector('input[name="apps-order"]').value = JSON.stringify(value)
|
||||||
})
|
})
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,6 +109,3 @@
|
||||||
"Normal text": "Normální text"
|
"Normal text": "Normální text"
|
||||||
"Big text": "Velký text"
|
"Big text": "Velký text"
|
||||||
"Applications": "Applications"
|
"Applications": "Applications"
|
||||||
"This feature is not compatible with <code>big menu</code> and <code>with categories</code> displays.": "This\
|
|
||||||
\ feature is not compatible with <code>big menu</code> and <code>with categories</code>\
|
|
||||||
\ displays."
|
|
||||||
|
|
|
@ -112,6 +112,3 @@
|
||||||
"Normal text": "Normaler Text"
|
"Normal text": "Normaler Text"
|
||||||
"Big text": "Großer Text"
|
"Big text": "Großer Text"
|
||||||
"Applications": "Applications"
|
"Applications": "Applications"
|
||||||
"This feature is not compatible with <code>big menu</code> and <code>with categories</code> displays.": "This\
|
|
||||||
\ feature is not compatible with <code>big menu</code> and <code>with categories</code>\
|
|
||||||
\ displays."
|
|
||||||
|
|
|
@ -114,6 +114,3 @@
|
||||||
\ et latéral"
|
\ et latéral"
|
||||||
"Reset to default": "Restaurer les valeurs par défaut"
|
"Reset to default": "Restaurer les valeurs par défaut"
|
||||||
"Applications": "Applications"
|
"Applications": "Applications"
|
||||||
"This feature is not compatible with <code>big menu</code> and <code>with categories</code> displays.": "Cette\
|
|
||||||
\ fonctionnalité n'est pas compatible avec les affichages <code>Menu large</code>\
|
|
||||||
\ et <code>Avec les catégories</code>."
|
|
||||||
|
|
|
@ -93,4 +93,3 @@
|
||||||
"Apps visible in the top and side menus": ""
|
"Apps visible in the top and side menus": ""
|
||||||
"Reset to default": ""
|
"Reset to default": ""
|
||||||
"Applications": ""
|
"Applications": ""
|
||||||
"This feature is not compatible with <code>big menu</code> and <code>with categories</code> displays.": ""
|
|
||||||
|
|
|
@ -90,4 +90,3 @@
|
||||||
"Normal text": "普通文本"
|
"Normal text": "普通文本"
|
||||||
"Big text": "大文本"
|
"Big text": "大文本"
|
||||||
"Applications": "Applications"
|
"Applications": "Applications"
|
||||||
"This feature is not compatible with <code>big menu</code> and <code>with categories</code> displays.": "This feature is not compatible with <code>big menu</code> and <code>with categories</code> displays."
|
|
||||||
|
|
|
@ -25,8 +25,8 @@ if ($_['always-displayed']) {
|
||||||
const targetBlankApps = <?php echo json_encode($_['target-blank-apps']) ?>
|
const targetBlankApps = <?php echo json_encode($_['target-blank-apps']) ?>
|
||||||
|
|
||||||
window.topMenuApps = <?php echo json_encode($_['top-menu-apps']), "\n"; ?>
|
window.topMenuApps = <?php echo json_encode($_['top-menu-apps']), "\n"; ?>
|
||||||
window.topMenuAppsOrder = <?php echo json_encode($_['top-menu-apps-order']), "\n"; ?>
|
window.topSideMenuApps = <?php echo json_encode($_['top-side-menu-apps'])."\n"; ?>
|
||||||
window.topSideMenuApps = <?php echo json_encode($_['top-side-menu-apps']); ?>
|
window.menuAppsOrder = <?php echo json_encode($_['apps-order']), "\n"; ?>
|
||||||
|
|
||||||
<?php if ($display === 'big-menu'): ?>
|
<?php if ($display === 'big-menu'): ?>
|
||||||
sideMenu.setAttribute('data-bigmenu', '1')
|
sideMenu.setAttribute('data-bigmenu', '1')
|
||||||
|
|
|
@ -839,19 +839,19 @@ $labelReset = 'Reset to default';
|
||||||
<div class="side-menu-setting-row">
|
<div class="side-menu-setting-row">
|
||||||
<div class="side-menu-setting-label">
|
<div class="side-menu-setting-label">
|
||||||
<?php p($l->t('Customize sorting')); ?>
|
<?php p($l->t('Customize sorting')); ?>
|
||||||
<br>
|
|
||||||
<em>
|
|
||||||
<?php echo $l->t('This feature is not compatible with <code>big menu</code> and <code>with categories</code> displays.'); ?>
|
|
||||||
</em>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="side-menu-setting-form">
|
<div class="side-menu-setting-form">
|
||||||
<a class="side-menu-toggler" data-target="#top-menu-apps-order-list" href="#_">
|
<a class="side-menu-toggler" data-target="#apps-order-list" href="#_">
|
||||||
🖱️ <?php p($l->t($labelShowHideApps)); ?>
|
🖱️ <?php p($l->t($labelShowHideApps)); ?>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<div id="top-menu-apps-order-list" style="display: none">
|
<div class="theme-undo icon icon-history btn-reset btn-reset--down" data-toggle="tooltip" data-original-title="<?php echo p($l->t($labelReset)); ?>" data-reset="<?php echo htmlentities(json_encode([
|
||||||
|
'side-menu-apps-order' => [],
|
||||||
|
])) ?>"></div>
|
||||||
|
|
||||||
|
<div id="apps-order-list" style="display: none">
|
||||||
<ul class="side-menu-setting-list">
|
<ul class="side-menu-setting-list">
|
||||||
<?php foreach ($_['top-menu-ordered-apps'] as $key => $app): ?>
|
<?php foreach ($_['ordered-apps'] as $key => $app): ?>
|
||||||
<li data-id="<?php echo $app['id']; ?>" class="side-menu-setting-list-item">
|
<li data-id="<?php echo $app['id']; ?>" class="side-menu-setting-list-item">
|
||||||
<span class="arrow">
|
<span class="arrow">
|
||||||
⇅
|
⇅
|
||||||
|
@ -863,7 +863,7 @@ $labelReset = 'Reset to default';
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<input type="hidden" value='<?php echo json_encode(array_keys($_['top-menu-apps-order'])) ?>' name="top-menu-apps-order" class="side-menu-setting">
|
<input type="hidden" value='<?php echo json_encode($_['apps-order']) ?>' name="apps-order" class="side-menu-setting" id="side-menu-apps-order">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in a new issue