Merge branch 'feature/issue30-tab' into develop

This commit is contained in:
Simon Vieille 2020-09-12 16:40:43 +02:00
commit 17a57f3685
14 changed files with 124 additions and 32 deletions

View file

@ -64,3 +64,7 @@
font-size: 11px; font-size: 11px;
font-weight: normal; font-weight: normal;
} }
.side-menu-toggler {
cursor: pointer;
}

View file

@ -54,7 +54,7 @@ class JsController extends Controller
{ {
$user = OC::$server[IUserSession::class]->getUser(); $user = OC::$server[IUserSession::class]->getUser();
$topMenuApps = (array) json_decode($this->config->getAppValue('side_menu', 'top-menu-apps', '[]'), true); $topMenuApps = (array) json_decode($this->config->getAppValue('side_menu', 'top-menu-apps', '[]'), true);
$targetBlank = (bool) $this->config->getAppValue('side_menu', 'target-blank', '0'); $targetBlankApps = (array) json_decode($this->config->getAppValue('side_menu', 'target-blank-apps', '[]'), true);
if ($user) { if ($user) {
$userTopMenuApps = (array) json_decode($this->config->getUserValue($user->getUid(), 'side_menu', 'top-menu-apps', '[]'), true); $userTopMenuApps = (array) json_decode($this->config->getUserValue($user->getUid(), 'side_menu', 'top-menu-apps', '[]'), true);
@ -63,10 +63,11 @@ class JsController extends Controller
$topMenuApps = $userTopMenuApps; $topMenuApps = $userTopMenuApps;
} }
$userTargetBlank = (int) $this->config->getUserValue($user->getUid(), 'side_menu', 'target-blank', '-1'); $userTargetBlankMode = (int) $this->config->getUserValue($user->getUid(), 'side_menu', 'target-blank-mode', '1');
$userTargetBlankApps = (array) json_decode($this->config->getUserValue($user->getUid(), 'side_menu', 'target-blank-apps', '[]'), true);
if ($userTargetBlank !== -1) { if ($userTargetBlankMode === 2) {
$targetBlank = (bool) $userTargetBlank; $targetBlankApps = $userTargetBlankApps;
} }
} }
@ -81,7 +82,7 @@ class JsController extends Controller
'always-displayed' => (bool) $this->config->getAppValue('side_menu', 'always-displayed', '0'), 'always-displayed' => (bool) $this->config->getAppValue('side_menu', 'always-displayed', '0'),
'big-menu' => (bool) $this->config->getAppValue('side_menu', 'big-menu', '0'), 'big-menu' => (bool) $this->config->getAppValue('side_menu', 'big-menu', '0'),
'top-menu-apps' => $topMenuApps, 'top-menu-apps' => $topMenuApps,
'target-blank' => $targetBlank, 'target-blank-apps' => $targetBlankApps,
]; ];
$response = new TemplateResponse('side_menu', 'js/script', $parameters, 'blank'); $response = new TemplateResponse('side_menu', 'js/script', $parameters, 'blank');

View file

@ -65,11 +65,26 @@ class PersonalSettingController extends Controller
} }
} }
if ('target-blank' === $name) { if ('target-blank-mode' === $name) {
$doSave = true; $doSave = true;
if (!in_array($value, ['-1', '0', '1'])) { if (!in_array($value, ['1', '2'])) {
$value = '-1'; $value = '1';
}
}
if ('target-blank-apps' === $name) {
$doSave = true;
$data = json_decode($value, true);
if (!is_array($data)) {
$doSave = false;
} else {
foreach ($data as $v) {
if (!is_string($v)) {
$doSave = false;
}
}
} }
} }

View file

@ -75,7 +75,6 @@ class Admin implements ISettings
'cache' => $this->config->getAppValue('side_menu', 'cache', '0'), 'cache' => $this->config->getAppValue('side_menu', 'cache', '0'),
'opener' => $this->config->getAppValue('side_menu', 'opener', 'side-menu-opener'), 'opener' => $this->config->getAppValue('side_menu', 'opener', 'side-menu-opener'),
'always-displayed' => $this->config->getAppValue('side_menu', 'always-displayed', '0'), 'always-displayed' => $this->config->getAppValue('side_menu', 'always-displayed', '0'),
'target-blank' => $this->config->getAppValue('side_menu', 'target-blank', '0'),
'big-menu' => $this->config->getAppValue('side_menu', 'big-menu', '0'), 'big-menu' => $this->config->getAppValue('side_menu', 'big-menu', '0'),
'display-logo' => $this->config->getAppValue('side_menu', 'display-logo', '1'), 'display-logo' => $this->config->getAppValue('side_menu', 'display-logo', '1'),
'opener-position' => $this->config->getAppValue('side_menu', 'opener-position', 'before'), 'opener-position' => $this->config->getAppValue('side_menu', 'opener-position', 'before'),
@ -84,6 +83,7 @@ class Admin implements ISettings
'hide-when-no-apps' => $this->config->getAppValue('side_menu', 'hide-when-no-apps', '0'), 'hide-when-no-apps' => $this->config->getAppValue('side_menu', 'hide-when-no-apps', '0'),
'size-icon' => $this->config->getAppValue('side_menu', 'size-icon', 'normal'), 'size-icon' => $this->config->getAppValue('side_menu', 'size-icon', 'normal'),
'size-text' => $this->config->getAppValue('side_menu', 'size-text', 'normal'), 'size-text' => $this->config->getAppValue('side_menu', 'size-text', 'normal'),
'target-blank-apps' => (array) json_decode($this->config->getAppValue('side_menu', 'target-blank-apps', '[]'), true),
'top-menu-apps' => (array) json_decode($this->config->getAppValue('side_menu', 'top-menu-apps', '[]'), true), 'top-menu-apps' => (array) json_decode($this->config->getAppValue('side_menu', 'top-menu-apps', '[]'), true),
'apps' => $this->appRepository->getVisibleApps(), 'apps' => $this->appRepository->getVisibleApps(),
]; ];

View file

@ -72,7 +72,8 @@ class Personal implements ISettings
$parameters = [ $parameters = [
'enabled' => $this->config->getUserValue($user->getUid(), 'side_menu', 'enabled', '1'), 'enabled' => $this->config->getUserValue($user->getUid(), 'side_menu', 'enabled', '1'),
'top-menu-apps' => (array) json_decode($this->config->getUserValue($user->getUid(), 'side_menu', 'top-menu-apps', '[]'), true), 'top-menu-apps' => (array) json_decode($this->config->getUserValue($user->getUid(), 'side_menu', 'top-menu-apps', '[]'), true),
'target-blank' => $this->config->getUserValue($user->getUid(), 'side_menu', 'target-blank', '-1'), 'target-blank-mode' => $this->config->getUserValue($user->getUid(), 'side_menu', 'target-blank-mode', '1'),
'target-blank-apps' => (array) json_decode($this->config->getUserValue($user->getUid(), 'side_menu', 'target-blank-apps', '[]'), true),
'apps' => $this->appRepository->getVisibleApps(), 'apps' => $this->appRepository->getVisibleApps(),
]; ];

View file

@ -26,7 +26,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<ul class="side-menu-apps-list"> <ul class="side-menu-apps-list">
<li v-for="app in apps" v-bind:class="{'side-menu-app': true, 'active': app.active}"> <li v-for="app in apps" v-bind:class="{'side-menu-app': true, 'active': app.active}">
<a v-bind:href="app.href" :target="targetBlank ? '_blank' : undefined" v-bind:title="app.name"> <a v-bind:href="app.href" :target="targetBlankApps.indexOf(app.id) !== -1 ? '_blank' : undefined" v-bind:title="app.name">
<span class="side-menu-app-icon" v-html="app.icon"></span> <span class="side-menu-app-icon" v-html="app.icon"></span>
<span class="side-menu-app-text" v-html="app.name"></span> <span class="side-menu-app-text" v-html="app.name"></span>
</a> </a>
@ -87,6 +87,7 @@ export default {
} }
this.apps.push({ this.apps.push({
id: dataId,
href: href, href: href,
name: trim(element.querySelector('span').innerHTML), name: trim(element.querySelector('span').innerHTML),
icon: svg, icon: svg,
@ -120,7 +121,7 @@ export default {
this.retrieveApps() this.retrieveApps()
this.retrieveLogo() this.retrieveLogo()
this.forceLightIcon = document.querySelector('#side-menu-container').getAttribute('data-forcelighticon') == 1; this.forceLightIcon = document.querySelector('#side-menu-container').getAttribute('data-forcelighticon') == 1;
this.targetBlank = document.querySelector('#side-menu-container').getAttribute('data-targetblank') == 1; this.targetBlankApps = document.querySelector('#side-menu-container').getAttribute('data-targetblankapps').split(',');
const menu = document.querySelector('#appmenu') const menu = document.querySelector('#appmenu')

View file

@ -28,7 +28,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<ul class="side-menu-apps-list"> <ul class="side-menu-apps-list">
<li v-bind:class="{'side-menu-app': true, 'active': activeApp === appId}" v-for="(app, appId) in category.apps"> <li v-bind:class="{'side-menu-app': true, 'active': activeApp === appId}" v-for="(app, appId) in category.apps">
<a v-bind:href="app.href" :target="targetBlank ? '_blank' : undefined" v-bind:title="app.name"> <a v-bind:href="app.href" :target="targetBlankApps.indexOf(appId) !== -1 ? '_blank' : undefined" v-bind:title="app.name">
<img class="side-menu-app-icon" v-bind:src="app.icon"></span> <img class="side-menu-app-icon" v-bind:src="app.icon"></span>
<span class="side-menu-app-text" v-html="app.name"></span> <span class="side-menu-app-text" v-html="app.name"></span>
</a> </a>
@ -80,7 +80,7 @@ export default {
}, },
}, },
mounted() { mounted() {
this.targetBlank = document.querySelector('#side-menu-container').getAttribute('data-targetblank') == 1; this.targetBlankApps = document.querySelector('#side-menu-container').getAttribute('data-targetblankapps').split(',');
this.retrieveApps() this.retrieveApps()
this.retrieveActiveApp() this.retrieveActiveApp()

View file

@ -81,6 +81,10 @@ const saveSettings = (key) => {
} }
} }
const elementToggler = (element) => {
jQuery(element).toggle()
}
jQuery(document).ready(() => { jQuery(document).ready(() => {
elements = jQuery('.side-menu-setting') elements = jQuery('.side-menu-setting')
@ -118,4 +122,11 @@ jQuery(document).ready(() => {
document.documentElement.style.setProperty('--side-menu-' + name, value) document.documentElement.style.setProperty('--side-menu-' + name, value)
}) })
jQuery('.side-menu-toggler').on('click', (event) => {
var target = jQuery(event.target)
var element = target.attr('data-target')
elementToggler(element)
})
}); });

View file

@ -54,3 +54,5 @@
"Live preview": "Live Vorschau" "Live preview": "Live Vorschau"
"Open apps in new tab": "Öffnen Sie Apps in einem neuen Tab" "Open apps in new tab": "Öffnen Sie Apps in einem neuen Tab"
"Use the global setting": "Verwenden Sie die globale Einstellung" "Use the global setting": "Verwenden Sie die globale Einstellung"
"Use my selection": "Verwenden Sie meine Auswahl"
"Show and hide the list of applications": "Ein- und Ausblenden der Anwendungsliste"

View file

@ -54,3 +54,5 @@
"Live preview": "Aperçu en direct" "Live preview": "Aperçu en direct"
"Open apps in new tab": "Ouvrir les applications dans un nouvel onglet" "Open apps in new tab": "Ouvrir les applications dans un nouvel onglet"
"Use the global setting": "Utiliser la configuration globale" "Use the global setting": "Utiliser la configuration globale"
"Use my selection": "Utiliser ma sélection"
"Show and hide the list of applications": "Afficher et masquer la liste des applications"

View file

@ -38,6 +38,10 @@ var updateTopMenu = function() {
appShown.push(app) appShown.push(app)
navigationApps.append(app.outerHTML) navigationApps.append(app.outerHTML)
} }
if (targetBlankApps.indexOf(dataId) !== -1) {
jQuery(app).children('a').attr('target', '_blank');
}
}) })
var rightHeaderWidth = jQuery('.header-right').outerWidth() var rightHeaderWidth = jQuery('.header-right').outerWidth()

View file

@ -14,9 +14,9 @@
sideMenuContainer.attr('data-forcelighticon', '1') sideMenuContainer.attr('data-forcelighticon', '1')
<?php endif; ?> <?php endif; ?>
<?php if ($_['target-blank']): ?> sideMenuContainer.attr('data-targetblankapps', '<?php p(implode(',', $_['target-blank-apps'])) ?>')
sideMenuContainer.attr('data-targetblank', '1')
<?php endif; ?> var targetBlankApps = <?php echo json_encode($_['target-blank-apps']) ?>;
body.on('side-menu.apps', function(e, apps) { body.on('side-menu.apps', function(e, apps) {
<?php if ($_['hide-when-no-apps']): ?> <?php if ($_['hide-when-no-apps']): ?>

View file

@ -372,16 +372,32 @@ $choicesSizes = [
</label> </label>
</div> </div>
<div> <p>
<select id="side-menu-loader-enabled" name="target-blank" class="side-menu-setting"> <a class="side-menu-toggler" data-target="#target-blank-apps" href="#_">
<?php foreach ($choicesYesNo as $label => $value): ?> 🖱️ <?php p($l->t('Show and hide the list of applications')); ?>
<option value="<?php echo $value ?>" <?php if ($value === $_['target-blank']): ?>selected<?php endif; ?>> </a>
<?php echo $l->t($label); ?> </p>
</option>
<?php endforeach; ?> <div class="side-menu-setting" data-name="target-blank-apps" id="target-blank-apps" data-checkbox style="display: none">
</select> <?php foreach ($_['apps'] as $app): ?>
<div>
<input
type="checkbox"
name="target-blank-apps[]"
value="<?php echo $app['id'] ?>"
id="target-blank-app-<?php echo $app['id'] ?>"
<?php if (in_array($app['id'], $_['target-blank-apps'])): ?>checked<?php endif; ?>
/>
<label for="target-blank-app-<?php echo $app['id'] ?>">
<?php echo p($l->t($app['name'])); ?>
</label>
</div>
<?php endforeach; ?>
</div> </div>
<br>
<div> <div>
<label for="side-menu-loader-enabled"> <label for="side-menu-loader-enabled">
<?php p($l->t('Loader enabled')); ?> <?php p($l->t('Loader enabled')); ?>
@ -409,7 +425,13 @@ $choicesSizes = [
</label> </label>
</div> </div>
<div class="side-menu-setting" data-name="top-menu-apps" data-checkbox> <p>
<a class="side-menu-toggler" data-target="#top-menu-apps" href="#_">
🖱️ <?php p($l->t('Show and hide the list of applications')); ?>
</a>
</p>
<div class="side-menu-setting" data-name="top-menu-apps" id="top-menu-apps" data-checkbox style="display: none">
<?php foreach ($_['apps'] as $app): ?> <?php foreach ($_['apps'] as $app): ?>
<div> <div>
<input <input

View file

@ -61,19 +61,42 @@ $choicesYesNo = [
<div> <div>
<?php $choices = [ <?php $choices = [
'Use the global setting' => '-1', 'Use the global setting' => '1',
'No' => '0', 'Use my selection' => '2',
'Yes' => '1',
]; ?> ]; ?>
<select id="side-menu-loader-enabled" name="target-blank" class="side-menu-setting" data-personal> <select id="side-menu-loader-enabled" name="target-blank-mode" class="side-menu-setting" data-personal>
<?php foreach ($choices as $label => $value): ?> <?php foreach ($choices as $label => $value): ?>
<option value="<?php echo $value ?>" <?php if ($value === $_['target-blank']): ?>selected<?php endif; ?>> <option value="<?php echo $value ?>" <?php if ($value === $_['target-blank-mode']): ?>selected<?php endif; ?>>
<?php echo $l->t($label); ?> <?php echo $l->t($label); ?>
</option> </option>
<?php endforeach; ?> <?php endforeach; ?>
</select> </select>
</div> </div>
<p>
<a class="side-menu-toggler" data-target="#target-blank-apps" href="#_">
🖱️ <?php p($l->t('Show and hide the list of applications')); ?>
</a>
</p>
<div class="side-menu-setting" data-name="target-blank-apps" id="target-blank-apps" data-personal data-checkbox style="display: none">
<?php foreach ($_['apps'] as $app): ?>
<div>
<input
type="checkbox"
name="target-blank-apps[]"
value="<?php echo $app['id'] ?>"
id="target-blank-app-<?php echo $app['id'] ?>"
<?php if (in_array($app['id'], $_['target-blank-apps'])): ?>checked<?php endif; ?>
/>
<label for="target-blank-app-<?php echo $app['id'] ?>">
<?php echo p($l->t($app['name'])); ?>
</label>
</div>
<?php endforeach; ?>
</div>
</div> </div>
<div class="section"> <div class="section">
@ -92,7 +115,13 @@ $choicesYesNo = [
</em> </em>
</p> </p>
<div class="side-menu-setting" data-name="top-menu-apps" data-checkbox data-personal> <p>
<a class="side-menu-toggler" data-target="#top-menu-apps" href="#_">
🖱️ <?php p($l->t('Show and hide the list of applications')); ?>
</a>
</p>
<div class="side-menu-setting" data-name="top-menu-apps" data-checkbox data-personal id="top-menu-apps" style="display: none">
<?php foreach ($_['apps'] as $app): ?> <?php foreach ($_['apps'] as $app): ?>
<div> <div>
<input <input