mirror of
https://github.com/nextcloud/server.git
synced 2026-04-22 23:03:00 -04:00
Merge pull request #29210 from nextcloud/work/status-navbar-vue
Add current status in navbar
This commit is contained in:
commit
ff67ada049
11 changed files with 514 additions and 285 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -26,6 +26,7 @@ import Vue from 'vue'
|
|||
import { getRequestToken } from '@nextcloud/auth'
|
||||
import UserStatus from './UserStatus'
|
||||
import store from './store'
|
||||
import Avatar from '@nextcloud/vue/dist/Components/Avatar'
|
||||
|
||||
// eslint-disable-next-line camelcase
|
||||
__webpack_nonce__ = btoa(getRequestToken())
|
||||
|
|
@ -39,6 +40,23 @@ __webpack_public_path__ = OC.linkTo('user_status', 'js/')
|
|||
Vue.prototype.t = t
|
||||
Vue.prototype.$t = t
|
||||
|
||||
const avatarDiv = document.getElementById('avatardiv-menu')
|
||||
const propsData = {
|
||||
preloadedUserStatus: {
|
||||
message: avatarDiv.dataset.userstatus_message,
|
||||
icon: avatarDiv.dataset.userstatus_icon,
|
||||
status: avatarDiv.dataset.userstatus,
|
||||
},
|
||||
user: avatarDiv.dataset.user,
|
||||
displayName: avatarDiv.dataset.displayname,
|
||||
url: avatarDiv.dataset.avatar,
|
||||
disableMenu: true,
|
||||
disableTooltip: true,
|
||||
}
|
||||
|
||||
const AvatarInMenu = Vue.extend(Avatar)
|
||||
new AvatarInMenu({ propsData }).$mount('#avatardiv-menu')
|
||||
|
||||
// Register settings menu entry
|
||||
export default new Vue({
|
||||
el: 'li[data-id="user_status-menuitem"]',
|
||||
|
|
|
|||
|
|
@ -1,4 +1,18 @@
|
|||
<!DOCTYPE html>
|
||||
<?php
|
||||
/**
|
||||
* @var \OC_Defaults $theme
|
||||
* @var array $_
|
||||
*/
|
||||
|
||||
$getUserAvatar = static function (int $size) use ($_): string {
|
||||
return \OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', [
|
||||
'userId' => $_['user_uid'],
|
||||
'size' => $size,
|
||||
'v' => $_['userAvatarVersion']
|
||||
]);
|
||||
}
|
||||
|
||||
?><!DOCTYPE html>
|
||||
<html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" data-locale="<?php p($_['locale']); ?>" >
|
||||
<head data-user="<?php p($_['user_uid']); ?>" data-user-displayname="<?php p($_['user_displayname']); ?>" data-requesttoken="<?php p($_['requesttoken']); ?>">
|
||||
<meta charset="utf-8">
|
||||
|
|
@ -131,19 +145,30 @@
|
|||
<div id="expand" tabindex="0" role="button" class="menutoggle"
|
||||
aria-label="<?php p($l->t('Settings'));?>"
|
||||
aria-haspopup="true" aria-controls="expanddiv" aria-expanded="false">
|
||||
<div class="avatardiv<?php if ($_['userAvatarSet']) {
|
||||
<div id="avatardiv-menu" class="avatardiv<?php if ($_['userAvatarSet']) {
|
||||
print_unescaped(' avatardiv-shown');
|
||||
} else {
|
||||
print_unescaped('" style="display: none');
|
||||
} ?>">
|
||||
<?php if ($_['userAvatarSet']): ?>
|
||||
} ?>"
|
||||
data-user="<?php p($_['user_uid']); ?>"
|
||||
data-displayname="<?php p($_['user_displayname']); ?>"
|
||||
<?php if ($_['userStatus'] !== false) { ?>
|
||||
data-userstatus="<?php p($_['userStatus']->getStatus()); ?>"
|
||||
data-userstatus_message="<?php p($_['userStatus']->getMessage()); ?>"
|
||||
data-userstatus_icon="<?php p($_['userStatus']->getIcon()); ?>"
|
||||
<?php }
|
||||
if ($_['userAvatarSet']) {
|
||||
$avatar32 = $getUserAvatar(32); ?> data-avatar="<?php p($avatar32); ?>"
|
||||
<?php
|
||||
} ?>>
|
||||
<?php
|
||||
if ($_['userAvatarSet']) {?>
|
||||
<img alt="" width="32" height="32"
|
||||
src="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 32, 'v' => $_['userAvatarVersion']]));?>"
|
||||
srcset="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 64, 'v' => $_['userAvatarVersion']]));?> 2x, <?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 128, 'v' => $_['userAvatarVersion']]));?> 4x"
|
||||
src="<?php p($avatar32);?>"
|
||||
srcset="<?php p($getUserAvatar(64));?> 2x, <?php p($getUserAvatar(128));?> 4x"
|
||||
>
|
||||
<?php endif; ?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<div id="expandDisplayName" class="icon-settings-white"></div>
|
||||
</div>
|
||||
<nav class="settings-menu" id="expanddiv" style="display:none;"
|
||||
aria-label="<?php p($l->t('Settings menu'));?>">
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ use OC\Search\SearchQuery;
|
|||
use OC\Template\JSCombiner;
|
||||
use OC\Template\JSConfigHelper;
|
||||
use OC\Template\SCSSCacher;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\AppFramework\Http\TemplateResponse;
|
||||
use OCP\Defaults;
|
||||
use OCP\IConfig;
|
||||
|
|
@ -54,6 +55,7 @@ use OCP\IInitialStateService;
|
|||
use OCP\INavigationManager;
|
||||
use OCP\IUserSession;
|
||||
use OCP\Support\Subscription\IRegistry;
|
||||
use OCP\UserStatus\IManager as IUserStatusManager;
|
||||
use OCP\Util;
|
||||
|
||||
class TemplateLayout extends \OC_Template {
|
||||
|
|
@ -131,11 +133,23 @@ class TemplateLayout extends \OC_Template {
|
|||
$this->assign('user_displayname', $userDisplayName);
|
||||
$this->assign('user_uid', \OC_User::getUser());
|
||||
|
||||
if (\OC_User::getUser() === false) {
|
||||
if ($user === null) {
|
||||
$this->assign('userAvatarSet', false);
|
||||
$this->assign('userStatus', false);
|
||||
} else {
|
||||
$this->assign('userAvatarSet', true);
|
||||
$this->assign('userAvatarVersion', $this->config->getUserValue(\OC_User::getUser(), 'avatar', 'version', 0));
|
||||
if (\OC::$server->get(IAppManager::class)->isEnabledForUser('user_status')) {
|
||||
$userStatusManager = \OC::$server->get(IUserStatusManager::class);
|
||||
$userStatuses = $userStatusManager->getUserStatuses([$user->getUID()]);
|
||||
if (array_key_exists($user->getUID(), $userStatuses)) {
|
||||
$this->assign('userStatus', $userStatuses[$user->getUID()]);
|
||||
} else {
|
||||
$this->assign('userStatus', false);
|
||||
}
|
||||
} else {
|
||||
$this->assign('userStatus', false);
|
||||
}
|
||||
}
|
||||
|
||||
// check if app menu icons should be inverted
|
||||
|
|
|
|||
Loading…
Reference in a new issue