From d2129a0dba20ae0d2393386cfd473745dde21564 Mon Sep 17 00:00:00 2001 From: Lucas Bartholemy Date: Thu, 6 Dec 2018 16:09:47 +0100 Subject: [PATCH 01/17] Added new menu/navigation handling --- .../humhub/modules/ui/menu/MenuEntry.php | 349 ++++++++++++++++++ .../modules/ui/menu/events/MenuEvent.php | 24 ++ .../modules/ui/menu/widgets/DropDownMenu.php | 29 ++ .../ui/menu/widgets/LeftNavigation.php | 29 ++ .../humhub/modules/ui/menu/widgets/Menu.php | 280 ++++++++++++++ .../modules/ui/menu/widgets/SubTabMenu.php | 29 ++ .../modules/ui/menu/widgets/TabMenu.php | 24 ++ .../ui/menu/widgets/views/dropdown-menu.php | 23 ++ .../ui/menu/widgets/views/left-navigation.php | 20 + .../ui/menu/widgets/views/sub-tab-menu.php | 14 + .../ui/menu/widgets/views/tab-menu.php | 16 + 11 files changed, 837 insertions(+) create mode 100644 protected/humhub/modules/ui/menu/MenuEntry.php create mode 100644 protected/humhub/modules/ui/menu/events/MenuEvent.php create mode 100644 protected/humhub/modules/ui/menu/widgets/DropDownMenu.php create mode 100644 protected/humhub/modules/ui/menu/widgets/LeftNavigation.php create mode 100644 protected/humhub/modules/ui/menu/widgets/Menu.php create mode 100644 protected/humhub/modules/ui/menu/widgets/SubTabMenu.php create mode 100644 protected/humhub/modules/ui/menu/widgets/TabMenu.php create mode 100644 protected/humhub/modules/ui/menu/widgets/views/dropdown-menu.php create mode 100644 protected/humhub/modules/ui/menu/widgets/views/left-navigation.php create mode 100644 protected/humhub/modules/ui/menu/widgets/views/sub-tab-menu.php create mode 100644 protected/humhub/modules/ui/menu/widgets/views/tab-menu.php diff --git a/protected/humhub/modules/ui/menu/MenuEntry.php b/protected/humhub/modules/ui/menu/MenuEntry.php new file mode 100644 index 0000000000..248dfe601b --- /dev/null +++ b/protected/humhub/modules/ui/menu/MenuEntry.php @@ -0,0 +1,349 @@ +getIcon() . ' ' . $this->getLabel(), + $this->getUrl(), + $this->getHtmlOptions($htmlOptions) + ); + } + + /** + * @param $label string the label + */ + public function setLabel($label) + { + $this->label = $label; + } + + /** + * @return string the label + */ + public function getLabel() + { + return $this->label; + } + + /** + * @return Icon the icon + */ + public function getIcon() + { + return $this->icon; + } + + /** + * @param $icon Icon the icon + */ + public function setIcon($icon) + { + $this->icon = $icon; + } + + /** + * Sets the URL + * + * @param $url array|string + */ + public function setUrl($url) + { + $this->url = $url; + } + + /** + * Returns the URL + * + * @param bool $asString return the URL as string + * @return array|string + */ + public function getUrl($asString = true) + { + if ($asString) { + return Url::to($this->url); + } + + return $this->url; + } + + /** + * @return boolean is active + */ + public function getIsActive() + { + if (is_callable($this->isActive)) { + call_user_func($this->isActive); + } + + if ($this->isActive) { + return true; + } + + return false; + } + + /** + * @param $state boolean + */ + public function setIsActive($state) + { + $this->isActive = $state; + } + + /** + * @param $id string the id + */ + public function setId($id) + { + $this->id = $id; + } + + /** + * @return string the id + */ + public function getId() + { + return $this->id; + } + + /** + * Returns the Html options for the menu entry link tag. + * + * @param $extraOptions array additional options to merge + * @return array + */ + public function getHtmlOptions($extraOptions = []) + { + $options = $this->htmlOptions; + + if (isset($extraOptions['class']) && isset($options['class'])) { + Html::addCssClass($options, $extraOptions['class']); + } elseif (isset($extraOptions['class'])) { + $options['class'] = $extraOptions['class']; + } + + if ($this->isActive) { + Html::addCssClass($options, 'active'); + } + + return $options; + } + + /** + * @param array $htmlOptions + */ + public function setHtmlOptions($htmlOptions) + { + $this->htmlOptions = $htmlOptions; + } + + /** + * @return bool + */ + public function isPjaxEnabled() + { + return $this->pjaxEnabled; + } + + /** + * @param bool $pjaxEnabled + */ + public function setPjaxEnabled($pjaxEnabled) + { + $this->pjaxEnabled = $pjaxEnabled; + } + + /** + * @return bool + */ + public function isVisible() + { + return $this->isVisible; + } + + /** + * @param bool $isVisible + */ + public function setIsVisible($isVisible) + { + $this->isVisible = $isVisible; + } + + /** + * @return string + */ + public function getBadgeText() + { + return $this->badgeText; + } + + /** + * @param string $badgeText + */ + public function setBadgeText($badgeText) + { + $this->badgeText = $badgeText; + } + + /** + * @return int + */ + public function getSortOrder() + { + return $this->sortOrder; + } + + /** + * @param int $sortOrder + */ + public function setSortOrder($sortOrder) + { + $this->sortOrder = $sortOrder; + } + + /** + * Creates MenuEntry by old and deprecated array structure + * + * @deprecated since 1.4 + * @param $item + * @return MenuEntry + */ + public static function createByArray($item) + { + $entry = new static; + + if (isset($item['id'])) { + $entry->id = $item['id']; + } + + if (isset($item['label'])) { + $entry->label = $item['label']; + } + + if (isset($item['icon'])) { + $entry->icon = $item['icon']; + } + + if (isset($item['url'])) { + $entry->url = $item['url']; + } + + if (isset($item['sortOrder'])) { + $entry->sortOrder = $item['sortOrder']; + } + + if (isset($item['isActive'])) { + $entry->isActive = $item['isActive']; + } + + if (isset($item['htmlOptions'])) { + $entry->isActive = $item['htmlOptions']; + } + + return $entry; + } + + /** + * Returns the MenuEntry as array structure + * + * @deprecated since 1.4 + * @return array the menu entry array representation + */ + public function toArray() + { + if (!isset($this->htmlOptions['class'])) { + $this->htmlOptions['class'] = ''; + } + + return [ + 'label' => $this->label, + 'id' => $this->id, + 'icon' => $this->icon, + 'url' => $this->url, + 'sortOrder' => $this->sortOrder, + 'isActive' => $this->isActive, + 'htmlOptions' => $this->htmlOptions + ]; + } + +} diff --git a/protected/humhub/modules/ui/menu/events/MenuEvent.php b/protected/humhub/modules/ui/menu/events/MenuEvent.php new file mode 100644 index 0000000000..ca330d0565 --- /dev/null +++ b/protected/humhub/modules/ui/menu/events/MenuEvent.php @@ -0,0 +1,24 @@ +entries[] = $entry; + } + + /** + * Removes the entry from the navigation + * + * @param MenuEntry $entry + * @return boolean + */ + public function removeEntry($entry) + { + foreach ($this->entries as $i => $e) { + if ($e === $entry) { + unset($entry[$i]); + return true; + } + } + + return false; + } + + /** + * Executes the navigation widget. + * + * @return string the result of navigation widget execution to be outputted. + */ + public function run() + { + $this->trigger(static::EVENT_RUN); + + if (empty($this->template)) { + return ''; + } + + return $this->render($this->template, $this->getViewParams()); + } + + /** + * Returns the parameters which are passed to the view template + * + * @return array the view parameters + */ + protected function getViewParams() + { + return [ + 'menu' => $this, + 'entries' => $this->entries, + + // Deprecated + 'items' => $this->getItems(), + 'numItems' => count($this->getItems()) + ]; + } + + /** + * Returns the first entry with the given URL + * + * @param $url string|array the url or route + * @return MenuEntry + */ + public function getEntryByUrl($url) + { + if (is_array($url)) { + $url = Url::to($url); + } + + foreach ($this->entries as $entry) { + if ($entry->getUrl() === $url) { + return $entry; + } + } + + return null; + } + + /** + * Returns the first active menu entry + * + * @return MenuEntry + */ + public function getActiveEntry() + { + foreach ($this->entries as $entry) { + if ($entry->getIsActive()) { + return $entry; + } + } + } + + /** + * Sets an menu entry active and inactive all other entries + * + * @param MenuEntry $entry + */ + public function setEntryActive($entry) + { + foreach ($this->entries as $e) { + $e->setIsActive(($entry->getUrl() === $e->getUrl())); + } + } + + /** + * ------------------------------------------------------------------- + * Compatibility Layer + * ------------------------------------------------------------------- + */ + + /** + * @deprecated + * @param array $entryArray + */ + public function addItem($entryArray) + { + $entry = MenuEntry::createByArray($entryArray); + $this->addEntry($entry); + } + + /** + * @deprecated since 1.4 not longer supported! + * @return array item group + */ + public function addItemGroup($itemGroup) + { + //throw new InvalidCallException('Item groups are not longer supported'); + } + + /** + * @deprecated + * @return array the item group + */ + public function getItemGroups() + { + return [ + ['id' => 'default', 'label' => '', 'icon' => '', 'sortOrder' => 1000] + ]; + } + + /** + * @deprecated + * @return array the menu items as array list + */ + public function getItems($group = '') + { + $items = []; + foreach ($this->entries as $entry) { + $items[] = $entry->toArray(); + } + return $items; + } + + /** + * @deprecated + */ + public function setActive($url) + { + $entry = $this->getEntryByUrl($url); + if ($entry) { + $this->setEntryActive($entry); + } + } + + /** + * @deprecated + */ + public function setInactive($url) + { + $entry = $this->getEntryByUrl($url); + if ($entry) { + $entry->setIsActive(false); + } + } + + /** + * @deprecated + */ + public static function markAsActive($url) + { + Event::on(static::class, static::EVENT_RUN, function ($event) use ($url) { + $event->sender->setActive($url); + }); + } + + /** + * @deprecated + */ + public static function markAsInactive($url) + { + Event::on(static::class, static::EVENT_RUN, function ($event) use ($url) { + $event->sender->setInactive($url); + }); + } + + /** + * @deprecated + * @return array the menu entry as array + */ + public function getActive() + { + $entry = $this->getActiveEntry(); + if ($entry) { + return $entry->toArray(); + } + } + + /** + * @deprecated + * @param $url string the URL or route + */ + public function deleteItemByUrl($url) + { + $entry = $this->getEntryByUrl($url); + if ($entry) { + $this->removeEntry($entry); + } + } + + /** + * @deprecated + */ + public static function setViewState() + { + $instance = new static(); + if (!empty($instance->id)) { + $active = $instance->getActive(); + $instance->view->registerJs('humhub.modules.ui.navigation.setActive("' . $instance->id . '", ' . json_encode($active) . ');', View::POS_END, 'active-' . $instance->id); + } + } + +} diff --git a/protected/humhub/modules/ui/menu/widgets/SubTabMenu.php b/protected/humhub/modules/ui/menu/widgets/SubTabMenu.php new file mode 100644 index 0000000000..d3af903233 --- /dev/null +++ b/protected/humhub/modules/ui/menu/widgets/SubTabMenu.php @@ -0,0 +1,29 @@ + + + diff --git a/protected/humhub/modules/ui/menu/widgets/views/left-navigation.php b/protected/humhub/modules/ui/menu/widgets/views/left-navigation.php new file mode 100644 index 0000000000..ace9c0e480 --- /dev/null +++ b/protected/humhub/modules/ui/menu/widgets/views/left-navigation.php @@ -0,0 +1,20 @@ + + +
+ + panelTitle)) : ?> +
panelTitle; ?>
+ + +
+ + renderLinkTag(['class' => 'list-group-item']) ?> + +
+ +
diff --git a/protected/humhub/modules/ui/menu/widgets/views/sub-tab-menu.php b/protected/humhub/modules/ui/menu/widgets/views/sub-tab-menu.php new file mode 100644 index 0000000000..f7673d0a38 --- /dev/null +++ b/protected/humhub/modules/ui/menu/widgets/views/sub-tab-menu.php @@ -0,0 +1,14 @@ + + + diff --git a/protected/humhub/modules/ui/menu/widgets/views/tab-menu.php b/protected/humhub/modules/ui/menu/widgets/views/tab-menu.php new file mode 100644 index 0000000000..2d2d35b270 --- /dev/null +++ b/protected/humhub/modules/ui/menu/widgets/views/tab-menu.php @@ -0,0 +1,16 @@ + + +
+ +
From 187bd7ee6772724702825d9222d01dfaa0c043a9 Mon Sep 17 00:00:00 2001 From: Lucas Bartholemy Date: Thu, 6 Dec 2018 16:10:27 +0100 Subject: [PATCH 02/17] Removed deprecated admin menu class --- .../modules/space/widgets/AdminMenu.php | 20 ------------------- 1 file changed, 20 deletions(-) delete mode 100755 protected/humhub/modules/space/widgets/AdminMenu.php diff --git a/protected/humhub/modules/space/widgets/AdminMenu.php b/protected/humhub/modules/space/widgets/AdminMenu.php deleted file mode 100755 index e1796159c4..0000000000 --- a/protected/humhub/modules/space/widgets/AdminMenu.php +++ /dev/null @@ -1,20 +0,0 @@ - From 413065d6e2c7ba0bdb02ca8084ab95201305b704 Mon Sep 17 00:00:00 2001 From: Lucas Bartholemy Date: Thu, 6 Dec 2018 17:23:48 +0100 Subject: [PATCH 03/17] Migrated menu classes --- .../modules/admin/widgets/AdminMenu.php | 135 ++++++++---------- .../admin/widgets/AdvancedSettingMenu.php | 7 +- .../admin/widgets/AuthenticationMenu.php | 8 +- .../admin/widgets/GroupManagerMenu.php | 8 +- .../modules/admin/widgets/GroupMenu.php | 13 +- .../modules/admin/widgets/InformationMenu.php | 5 +- .../modules/admin/widgets/SettingsMenu.php | 5 +- .../modules/admin/widgets/SpaceMenu.php | 15 +- .../humhub/modules/admin/widgets/UserMenu.php | 19 ++- .../modules/admin/widgets/UserSettingMenu.php | 9 +- protected/humhub/modules/dashboard/Events.php | 34 +++-- .../humhub/modules/directory/widgets/Menu.php | 23 ++- .../modules/friendship/widgets/ManageMenu.php | 8 +- .../modules/manage/widgets/DefaultMenu.php | 9 +- .../modules/manage/widgets/MemberMenu.php | 22 ++- .../manage/widgets/SecurityTabMenu.php | 9 +- .../space/widgets/HeaderControlsMenu.php | 36 ++--- .../humhub/modules/space/widgets/Menu.php | 28 ++-- .../modules/space/widgets/views/header.php | 5 +- .../humhub/modules/ui/menu/MenuEntry.php | 2 +- .../modules/user/widgets/AccountMenu.php | 26 ++-- .../user/widgets/AccountProfilMenu.php | 11 +- .../user/widgets/AccountSettingsMenu.php | 11 +- .../modules/user/widgets/AccountTopMenu.php | 4 +- .../modules/user/widgets/ProfileMenu.php | 18 +-- protected/humhub/widgets/FooterMenu.php | 17 ++- protected/humhub/widgets/TopMenu.php | 14 +- 27 files changed, 221 insertions(+), 280 deletions(-) diff --git a/protected/humhub/modules/admin/widgets/AdminMenu.php b/protected/humhub/modules/admin/widgets/AdminMenu.php index fa89db7b30..8cd7cde2bc 100644 --- a/protected/humhub/modules/admin/widgets/AdminMenu.php +++ b/protected/humhub/modules/admin/widgets/AdminMenu.php @@ -8,85 +8,82 @@ namespace humhub\modules\admin\widgets; +use humhub\modules\ui\menu\MenuEntry; +use humhub\modules\ui\menu\widgets\LeftNavigation; +use humhub\modules\ui\widgets\Icon; use Yii; -use yii\helpers\Url; /** - * Description of AdminMenu + * AdminMenu * * @author luke */ -class AdminMenu extends \humhub\widgets\BaseMenu +class AdminMenu extends LeftNavigation { - public $template = "@humhub/widgets/views/leftNavigation"; - public $type = "adminNavigation"; + /** + * @inheritdoc + */ public $id = "admin-menu"; + /** + * @inheritdoc + */ public function init() { - $this->addItemGroup([ - 'id' => 'admin', - 'label' => \Yii::t('AdminModule.widgets_AdminMenuWidget', 'Administration menu'), - 'sortOrder' => 100, - ]); + $this->panelTitle = Yii::t('AdminModule.widgets_AdminMenuWidget', 'Administration menu'); - $this->addItem([ - 'label' => \Yii::t('AdminModule.widgets_AdminMenuWidget', 'Users'), - 'url' => Url::toRoute(['/admin/user']), - 'icon' => '', - 'sortOrder' => 200, - 'isActive' => (\Yii::$app->controller->module && \Yii::$app->controller->module->id == 'admin' && (Yii::$app->controller->id == 'user' || Yii::$app->controller->id == 'group' || Yii::$app->controller->id == 'approval' || Yii::$app->controller->id == 'authentication' || Yii::$app->controller->id == 'user-profile' || Yii::$app->controller->id == 'pending-registrations')), - 'isVisible' => Yii::$app->user->can([ - new \humhub\modules\admin\permissions\ManageUsers(), - new \humhub\modules\admin\permissions\ManageSettings(), - new \humhub\modules\admin\permissions\ManageGroups() - ]), - ]); + $entry = new MenuEntry(); + $entry->setLabel(Yii::t('AdminModule.widgets_AdminMenuWidget', 'Users')); + $entry->setUrl(['/admin/user']); + $entry->setIcon(new Icon(['name' => 'user'])); + $entry->setSortOrder(200); + $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && (Yii::$app->controller->id == 'user' || Yii::$app->controller->id == 'group' || Yii::$app->controller->id == 'approval' || Yii::$app->controller->id == 'authentication' || Yii::$app->controller->id == 'user-profile' || Yii::$app->controller->id == 'pending-registrations'))); + $entry->setIsVisible(Yii::$app->user->can([ + new \humhub\modules\admin\permissions\ManageUsers(), + new \humhub\modules\admin\permissions\ManageSettings(), + new \humhub\modules\admin\permissions\ManageGroups() + ])); + $this->addEntry($entry); - $this->addItem([ - 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'Spaces'), - 'id' => 'spaces', - 'url' => Url::toRoute('/admin/space'), - 'icon' => '', - 'sortOrder' => 400, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'space'), - 'isVisible' => Yii::$app->user->can([ - new \humhub\modules\admin\permissions\ManageSpaces(), - new \humhub\modules\admin\permissions\ManageSettings(), - ]), - ]); + $entry = new MenuEntry(); + $entry->setLabel(Yii::t('AdminModule.widgets_AdminMenuWidget', 'Spaces')); + $entry->setUrl(['/admin/space']); + $entry->setIcon(new Icon(['name' => 'inbox'])); + $entry->setSortOrder(400); + $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'space')); + $entry->setIsVisible(Yii::$app->user->can([ + new \humhub\modules\admin\permissions\ManageSpaces(), + new \humhub\modules\admin\permissions\ManageSettings(), + ])); + $this->addEntry($entry); - $this->addItem([ - 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'Modules'), - 'id' => 'modules', - 'url' => Url::toRoute('/admin/module'), - 'icon' => '', - 'sortOrder' => 500, - 'newItemCount' => 0, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'module'), - 'isVisible' => Yii::$app->user->can(new \humhub\modules\admin\permissions\ManageModules()) - ]); + $entry = new MenuEntry(); + $entry->setLabel(Yii::t('AdminModule.widgets_AdminMenuWidget', 'Modules')); + $entry->setUrl(['/admin/module']); + $entry->setIcon(new Icon(['name' => 'rocket'])); + $entry->setSortOrder(500); + $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'module')); + $entry->setIsVisible(Yii::$app->user->can(new \humhub\modules\admin\permissions\ManageModules())); + $this->addEntry($entry); - $this->addItem([ - 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'Settings'), - 'url' => Url::toRoute('/admin/setting'), - 'icon' => '', - 'sortOrder' => 600, - 'newItemCount' => 0, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'setting'), - 'isVisible' => Yii::$app->user->can(new \humhub\modules\admin\permissions\ManageSettings()) - ]); + $entry = new MenuEntry(); + $entry->setLabel(Yii::t('AdminModule.widgets_AdminMenuWidget', 'Settings')); + $entry->setUrl(['/admin/setting']); + $entry->setIcon(new Icon(['name' => 'gears'])); + $entry->setSortOrder(600); + $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id == 'setting')); + $entry->setIsVisible(Yii::$app->user->can(new \humhub\modules\admin\permissions\ManageSettings())); + $this->addEntry($entry); - $this->addItem([ - 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'Information'), - 'url' => Url::toRoute('/admin/information'), - 'icon' => '', - 'sortOrder' => 10000, - 'newItemCount' => 0, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'information'), - 'isVisible' => Yii::$app->user->can(new \humhub\modules\admin\permissions\SeeAdminInformation()) - ]); + $entry = new MenuEntry(); + $entry->setLabel(Yii::t('AdminModule.widgets_AdminMenuWidget', 'Information')); + $entry->setUrl(['/admin/information']); + $entry->setIcon(new Icon(['name' => 'info-circle'])); + $entry->setSortOrder(1000); + $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'information')); + $entry->setIsVisible(Yii::$app->user->can(new \humhub\modules\admin\permissions\SeeAdminInformation())); + $this->addEntry($entry); parent::init(); } @@ -108,12 +105,6 @@ class AdminMenu extends \humhub\widgets\BaseMenu return parent::run(); } - public function addItem($item) - { - $item['group'] = 'admin'; - - parent::addItem($item); - } public static function canAccess() { @@ -123,19 +114,19 @@ class AdminMenu extends \humhub\widgets\BaseMenu Yii::$app->session->set('user.canSeeAdminSection', $canSeeAdminSection); } - return $canSeeAdminSection; + return $canSeeAdminSection; } private static function checkNonAdminAccess() { $adminMenu = new self(); - foreach($adminMenu->items as $item) { - if(isset($item['isVisible']) && $item['isVisible']) { + foreach ($adminMenu->items as $item) { + if (isset($item['isVisible']) && $item['isVisible']) { return true; } } - return false; + return false; } } diff --git a/protected/humhub/modules/admin/widgets/AdvancedSettingMenu.php b/protected/humhub/modules/admin/widgets/AdvancedSettingMenu.php index 0ee75c54d8..fb23e88eed 100644 --- a/protected/humhub/modules/admin/widgets/AdvancedSettingMenu.php +++ b/protected/humhub/modules/admin/widgets/AdvancedSettingMenu.php @@ -10,17 +10,14 @@ namespace humhub\modules\admin\widgets; use Yii; use yii\helpers\Url; +use humhub\modules\ui\menu\widgets\SubTabMenu; /** * Authentication Settings Menu */ -class AdvancedSettingMenu extends \humhub\widgets\BaseMenu +class AdvancedSettingMenu extends SubTabMenu { - /** - * @inheritdoc - */ - public $template = "@humhub/widgets/views/subTabMenu"; /** * @inheritdoc diff --git a/protected/humhub/modules/admin/widgets/AuthenticationMenu.php b/protected/humhub/modules/admin/widgets/AuthenticationMenu.php index 8459b35845..8eb53709ab 100644 --- a/protected/humhub/modules/admin/widgets/AuthenticationMenu.php +++ b/protected/humhub/modules/admin/widgets/AuthenticationMenu.php @@ -8,20 +8,16 @@ namespace humhub\modules\admin\widgets; +use humhub\modules\ui\menu\widgets\SubTabMenu; use Yii; use yii\helpers\Url; /** * Authentication Settings Menu */ -class AuthenticationMenu extends \humhub\widgets\BaseMenu +class AuthenticationMenu extends SubTabMenu { - /** - * @inheritdoc - */ - public $template = "@humhub/widgets/views/subTabMenu"; - /** * @inheritdoc */ diff --git a/protected/humhub/modules/admin/widgets/GroupManagerMenu.php b/protected/humhub/modules/admin/widgets/GroupManagerMenu.php index 1bde067cd3..c541e1c3cd 100644 --- a/protected/humhub/modules/admin/widgets/GroupManagerMenu.php +++ b/protected/humhub/modules/admin/widgets/GroupManagerMenu.php @@ -8,20 +8,16 @@ namespace humhub\modules\admin\widgets; +use humhub\modules\ui\menu\widgets\SubTabMenu; use Yii; use yii\helpers\Url; /** * Group Administration Menu */ -class GroupManagerMenu extends \humhub\widgets\BaseMenu +class GroupManagerMenu extends SubTabMenu { - /** - * @inheritdoc - */ - public $template = "@humhub/widgets/views/subTabMenu"; - /** * @var \humhub\modules\user\models\Group */ diff --git a/protected/humhub/modules/admin/widgets/GroupMenu.php b/protected/humhub/modules/admin/widgets/GroupMenu.php index cca3912097..af354059a8 100644 --- a/protected/humhub/modules/admin/widgets/GroupMenu.php +++ b/protected/humhub/modules/admin/widgets/GroupMenu.php @@ -8,20 +8,19 @@ namespace humhub\modules\admin\widgets; +use humhub\modules\ui\menu\widgets\SubTabMenu; use Yii; use yii\helpers\Url; /** * Group Administration Menu */ -class GroupMenu extends \humhub\widgets\BaseMenu +class GroupMenu extends SubTabMenu { /** * @inheritdoc */ - public $template = "@humhub/widgets/views/subTabMenu"; - public function init() { $this->addItem([ @@ -34,12 +33,4 @@ class GroupMenu extends \humhub\widgets\BaseMenu parent::init(); } - public function run() - { - if(count($this->getItemGroups()) > 1) { - return parent::run(); - } - return ''; - } - } diff --git a/protected/humhub/modules/admin/widgets/InformationMenu.php b/protected/humhub/modules/admin/widgets/InformationMenu.php index 2bef73629b..3aec6d7e54 100644 --- a/protected/humhub/modules/admin/widgets/InformationMenu.php +++ b/protected/humhub/modules/admin/widgets/InformationMenu.php @@ -8,20 +8,19 @@ namespace humhub\modules\admin\widgets; +use humhub\modules\ui\menu\widgets\TabMenu; use Yii; use yii\helpers\Url; /** * Group Administration Menu */ -class InformationMenu extends \humhub\widgets\BaseMenu +class InformationMenu extends TabMenu { /** * @inheritdoc */ - public $template = "@humhub/widgets/views/tabMenu"; - public function init() { $this->addItem([ diff --git a/protected/humhub/modules/admin/widgets/SettingsMenu.php b/protected/humhub/modules/admin/widgets/SettingsMenu.php index fef7ba2784..bb4755a313 100644 --- a/protected/humhub/modules/admin/widgets/SettingsMenu.php +++ b/protected/humhub/modules/admin/widgets/SettingsMenu.php @@ -8,20 +8,19 @@ namespace humhub\modules\admin\widgets; +use humhub\modules\ui\menu\widgets\TabMenu; use Yii; use yii\helpers\Url; /** * Group Administration Menu */ -class SettingsMenu extends \humhub\widgets\BaseMenu +class SettingsMenu extends TabMenu { /** * @inheritdoc */ - public $template = "@humhub/widgets/views/tabMenu"; - public function init() { $canEditSettings = Yii::$app->user->can(new \humhub\modules\admin\permissions\ManageSettings()); diff --git a/protected/humhub/modules/admin/widgets/SpaceMenu.php b/protected/humhub/modules/admin/widgets/SpaceMenu.php index cf4e7e993e..aaf7087e57 100644 --- a/protected/humhub/modules/admin/widgets/SpaceMenu.php +++ b/protected/humhub/modules/admin/widgets/SpaceMenu.php @@ -8,24 +8,26 @@ namespace humhub\modules\admin\widgets; +use humhub\modules\ui\menu\MenuEntry; use Yii; use yii\helpers\Url; -use humhub\modules\admin\permissions\ManageSpaces; use humhub\modules\admin\permissions\ManageSettings; +use humhub\modules\admin\permissions\ManageSpaces; +use humhub\modules\ui\menu\widgets\TabMenu; /** * Space Administration Menu * * @author Luke */ -class SpaceMenu extends \humhub\widgets\BaseMenu +class SpaceMenu extends TabMenu { - - public $template = "@humhub/widgets/views/tabMenu"; - public $type = "adminUserSubNavigation"; - + /** + * @inheritdoc + */ public function init() { + $this->addItem([ 'label' => Yii::t('AdminModule.views_space_index', 'Spaces'), 'url' => Url::toRoute(['/admin/space/index']), @@ -33,6 +35,7 @@ class SpaceMenu extends \humhub\widgets\BaseMenu 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'space' && Yii::$app->controller->action->id == 'index'), 'isVisible' => Yii::$app->user->can(new ManageSpaces()) ]); + $this->addItem([ 'label' => Yii::t('AdminModule.views_space_index', 'Settings'), 'url' => Url::toRoute(['/admin/space/settings']), diff --git a/protected/humhub/modules/admin/widgets/UserMenu.php b/protected/humhub/modules/admin/widgets/UserMenu.php index 03b7fbfe1c..8f2191bdb4 100644 --- a/protected/humhub/modules/admin/widgets/UserMenu.php +++ b/protected/humhub/modules/admin/widgets/UserMenu.php @@ -8,26 +8,25 @@ namespace humhub\modules\admin\widgets; -use Yii; -use yii\helpers\Url; use humhub\modules\admin\models\UserApprovalSearch; -use humhub\modules\admin\permissions\ManageUsers; use humhub\modules\admin\permissions\ManageGroups; use humhub\modules\admin\permissions\ManageSettings; -use humhub\modules\user\models\Invite; -use humhub\widgets\BaseMenu; +use humhub\modules\admin\permissions\ManageUsers; +use humhub\modules\ui\menu\widgets\TabMenu; +use Yii; +use yii\helpers\Url; /** * User Administration Menu * * @author Basti */ -class UserMenu extends BaseMenu +class UserMenu extends TabMenu { - public $template = '@humhub/widgets/views/tabMenu'; - public $type = 'adminUserSubNavigation'; - + /** + * @inheritdoc + */ public function init() { $this->addItem([ @@ -81,7 +80,7 @@ class UserMenu extends BaseMenu 'sortOrder' => 500, 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'group'), 'isVisible' => Yii::$app->user->can( - new ManageGroups() + new ManageGroups() ) ]); diff --git a/protected/humhub/modules/admin/widgets/UserSettingMenu.php b/protected/humhub/modules/admin/widgets/UserSettingMenu.php index 52286274db..96c0c85831 100644 --- a/protected/humhub/modules/admin/widgets/UserSettingMenu.php +++ b/protected/humhub/modules/admin/widgets/UserSettingMenu.php @@ -8,6 +8,7 @@ namespace humhub\modules\admin\widgets; +use humhub\modules\ui\menu\widgets\TabMenu; use Yii; use yii\helpers\Url; @@ -16,12 +17,12 @@ use yii\helpers\Url; * * @author Basti */ -class UserSettingMenu extends \humhub\widgets\BaseMenu +class UserSettingMenu extends TabMenu { - public $template = "@humhub/widgets/views/tabMenu"; - public $type = "adminUserSettingNavigation"; - + /** + * @inheritdoc + */ public function init() { $this->addItem([ diff --git a/protected/humhub/modules/dashboard/Events.php b/protected/humhub/modules/dashboard/Events.php index e9392f961c..6ac330214c 100644 --- a/protected/humhub/modules/dashboard/Events.php +++ b/protected/humhub/modules/dashboard/Events.php @@ -8,9 +8,13 @@ namespace humhub\modules\dashboard; +use humhub\modules\dashboard\widgets\ShareWidget; +use humhub\modules\ui\widgets\Icon; +use humhub\modules\ui\menu\events\MenuEvent; +use humhub\modules\ui\menu\MenuEntry; +use humhub\widgets\TopMenu; use Yii; use yii\helpers\Url; -use humhub\modules\dashboard\widgets\ShareWidget; /** * Description of Events @@ -21,23 +25,27 @@ class Events { /** - * On build of the TopMenu, check if module is enabled - * When enabled add a menu item + * TopMenu init event callback * - * @param type $event + * @see TopMenu + * @param MenuEvent $event */ public static function onTopMenuInit($event) { + $topMenu = $event->sender; - // Is Module enabled on this workspace? - $event->sender->addItem([ - 'label' => Yii::t('DashboardModule.base', 'Dashboard'), - 'id' => 'dashboard', - 'icon' => '', - 'url' => Url::toRoute('/dashboard/dashboard'), - 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'dashboard'), - ]); + $entry = new MenuEntry(); + + $entry->id = 'dashboard'; + $entry->label = Yii::t('DashboardModule.base', 'Dashboard'); + $entry->url = Url::to(['/dashboard/dashboard']); + $entry->icon = new Icon(['name' => 'tachometer']); + $entry->sortOrder = 100; + $entry->isActive = function () { + return (Yii::$app->controller->module && Yii::$app->controller->module->id === 'dashboard'); + }; + + $topMenu->addEntry($entry); } } diff --git a/protected/humhub/modules/directory/widgets/Menu.php b/protected/humhub/modules/directory/widgets/Menu.php index c03ba1d7ca..4ba05d637a 100644 --- a/protected/humhub/modules/directory/widgets/Menu.php +++ b/protected/humhub/modules/directory/widgets/Menu.php @@ -8,35 +8,30 @@ namespace humhub\modules\directory\widgets; -use humhub\modules\directory\Module; use Yii; use yii\helpers\Url; - -use humhub\modules\directory\models\User; +use humhub\modules\directory\Module; +use humhub\modules\ui\menu\widgets\LeftNavigation; /** - * Directory Menu + * Directory module navigation * * @since 0.21 * @author Luke */ -class Menu extends \humhub\widgets\BaseMenu +class Menu extends LeftNavigation { - - public $template = "@humhub/widgets/views/leftNavigation"; - + /** + * @inheritdoc + */ public function init() { /** @var Module $module */ $module = Yii::$app->getModule('directory'); - $this->addItemGroup([ - 'id' => 'directory', - 'label' => Yii::t('DirectoryModule.base', 'Directory menu'), - 'sortOrder' => 100, - ]); + $this->panelTitle = Yii::t('DirectoryModule.base', 'Directory menu'); - if (Yii::$app->getModule('directory')->isGroupListingEnabled()) { + if ($module->isGroupListingEnabled()) { $this->addItem([ 'label' => Yii::t('DirectoryModule.base', 'Groups'), 'group' => 'directory', diff --git a/protected/humhub/modules/friendship/widgets/ManageMenu.php b/protected/humhub/modules/friendship/widgets/ManageMenu.php index 9506268899..31fecb9f2d 100644 --- a/protected/humhub/modules/friendship/widgets/ManageMenu.php +++ b/protected/humhub/modules/friendship/widgets/ManageMenu.php @@ -8,6 +8,7 @@ namespace humhub\modules\friendship\widgets; +use humhub\modules\ui\menu\widgets\TabMenu; use Yii; use yii\helpers\Url; use humhub\modules\friendship\models\Friendship; @@ -15,7 +16,7 @@ use humhub\modules\friendship\models\Friendship; /** * Account Settings Tab Menu */ -class ManageMenu extends \humhub\widgets\BaseMenu +class ManageMenu extends TabMenu { /** @@ -23,11 +24,6 @@ class ManageMenu extends \humhub\widgets\BaseMenu */ public $user; - /** - * @inheritdoc - */ - public $template = "@humhub/widgets/views/tabMenu"; - /** * @inheritdoc */ diff --git a/protected/humhub/modules/space/modules/manage/widgets/DefaultMenu.php b/protected/humhub/modules/space/modules/manage/widgets/DefaultMenu.php index 98a4d12cf8..4a10bc42ef 100644 --- a/protected/humhub/modules/space/modules/manage/widgets/DefaultMenu.php +++ b/protected/humhub/modules/space/modules/manage/widgets/DefaultMenu.php @@ -8,24 +8,25 @@ namespace humhub\modules\space\modules\manage\widgets; -use humhub\widgets\BaseMenu; use Yii; +use humhub\modules\ui\menu\widgets\TabMenu; /** * Space Administration Menu * * @author Luke */ -class DefaultMenu extends BaseMenu +class DefaultMenu extends TabMenu { - public $template = '@humhub/widgets/views/tabMenu'; - /** * @var \humhub\modules\space\models\Space */ public $space; + /** + * @inheritdoc + */ public function init() { $this->addItem([ diff --git a/protected/humhub/modules/space/modules/manage/widgets/MemberMenu.php b/protected/humhub/modules/space/modules/manage/widgets/MemberMenu.php index e4ea5c81d0..f31ab50302 100644 --- a/protected/humhub/modules/space/modules/manage/widgets/MemberMenu.php +++ b/protected/humhub/modules/space/modules/manage/widgets/MemberMenu.php @@ -8,24 +8,18 @@ namespace humhub\modules\space\modules\manage\widgets; -use humhub\widgets\BaseMenu; -use humhub\modules\space\modules\manage\models\MembershipSearch; -use humhub\modules\space\models\Membership; use Yii; +use humhub\modules\space\models\Membership; +use humhub\modules\space\modules\manage\models\MembershipSearch; +use humhub\modules\ui\menu\widgets\TabMenu; /** * MemberMenu is a tabbed menu for space member administration * * @author Basti */ -class MemberMenu extends BaseMenu +class MemberMenu extends TabMenu { - - /** - * @inheritdoc - */ - public $template = '@humhub/widgets/views/tabMenu'; - /** * @var \humhub\modules\space\models\Space */ @@ -46,7 +40,7 @@ class MemberMenu extends BaseMenu if ($this->countPendingInvites() != 0) { $this->addItem([ - 'label' => Yii::t('SpaceModule.widgets_SpaceMembersMenu', 'Pending Invites') . '  '.$this->countPendingInvites().'', + 'label' => Yii::t('SpaceModule.widgets_SpaceMembersMenu', 'Pending Invites') . '  ' . $this->countPendingInvites() . '', 'url' => $this->space->createUrl('/space/manage/member/pending-invitations'), 'sortOrder' => 200, 'isActive' => (Yii::$app->controller->action->id == 'pending-invitations'), @@ -54,7 +48,7 @@ class MemberMenu extends BaseMenu } if ($this->countPendingApprovals() != 0) { $this->addItem([ - 'label' => Yii::t('SpaceModule.widgets_SpaceMembersMenu', 'Pending Approvals'). '  '.$this->countPendingApprovals().'', + 'label' => Yii::t('SpaceModule.widgets_SpaceMembersMenu', 'Pending Approvals') . '  ' . $this->countPendingApprovals() . '', 'url' => $this->space->createUrl('/space/manage/member/pending-approvals'), 'sortOrder' => 300, 'isActive' => (Yii::$app->controller->action->id == 'pending-approvals'), @@ -76,7 +70,7 @@ class MemberMenu extends BaseMenu /** * Returns the number of currently invited users - * + * * @return int currently invited members */ protected function countPendingInvites() @@ -90,7 +84,7 @@ class MemberMenu extends BaseMenu /** * Returns the number of currently pending approvals - * + * * @return int currently pending approvals */ protected function countPendingApprovals() diff --git a/protected/humhub/modules/space/modules/manage/widgets/SecurityTabMenu.php b/protected/humhub/modules/space/modules/manage/widgets/SecurityTabMenu.php index 837a0a2551..b8f78f40c1 100644 --- a/protected/humhub/modules/space/modules/manage/widgets/SecurityTabMenu.php +++ b/protected/humhub/modules/space/modules/manage/widgets/SecurityTabMenu.php @@ -8,7 +8,7 @@ namespace humhub\modules\space\modules\manage\widgets; -use humhub\widgets\BaseMenu; +use humhub\modules\ui\menu\widgets\TabMenu; use Yii; /** @@ -16,16 +16,17 @@ use Yii; * * @author Luke */ -class SecurityTabMenu extends BaseMenu +class SecurityTabMenu extends TabMenu { - public $template = '@humhub/widgets/views/tabMenu'; - /** * @var \humhub\modules\space\models\Space */ public $space; + /** + * @inheritdoc + */ public function init() { $this->addItem([ diff --git a/protected/humhub/modules/space/widgets/HeaderControlsMenu.php b/protected/humhub/modules/space/widgets/HeaderControlsMenu.php index c0d2215942..4e7d0df779 100644 --- a/protected/humhub/modules/space/widgets/HeaderControlsMenu.php +++ b/protected/humhub/modules/space/widgets/HeaderControlsMenu.php @@ -8,7 +8,8 @@ namespace humhub\modules\space\widgets; -use humhub\widgets\BaseMenu; +use humhub\modules\space\models\Space; +use humhub\modules\ui\menu\widgets\DropDownMenu; use Yii; /** @@ -18,27 +19,34 @@ use Yii; * @package humhub.modules_core.space.widgets * @since 0.5 */ -class HeaderControlsMenu extends BaseMenu +class HeaderControlsMenu extends DropDownMenu { - + /** + * @var Space + */ public $space; - public $template = '@humhub/widgets/views/leftNavigation'; + /** + * @inheritdoc + */ + public $label = ''; + + /** + * @inheritdoc + */ public function init() { - $this->addItemGroup([ - 'id' => 'admin', - 'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', ''), - 'sortOrder' => 100, - ]); + if ($this->template === '@humhub/widgets/views/dropdownNavigation') { + $this->template = '@ui/menu/widgets/views/dropdown-menu.php'; + } + // check user rights if ($this->space->isAdmin()) { $this->addItem([ 'label' => Yii::t('SpaceModule.base', 'Settings'), - 'group' => 'admin', 'url' => $this->space->createUrl('/space/manage'), 'icon' => '', 'sortOrder' => 100, @@ -47,7 +55,6 @@ class HeaderControlsMenu extends BaseMenu $this->addItem([ 'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'Security'), - 'group' => 'admin', 'url' => $this->space->createUrl('/space/manage/security'), 'icon' => '', 'sortOrder' => 200, @@ -56,7 +63,6 @@ class HeaderControlsMenu extends BaseMenu $this->addItem([ 'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'Members'), - 'group' => 'admin', 'url' => $this->space->createUrl('/space/manage/member'), 'icon' => '', 'sortOrder' => 200, @@ -65,7 +71,6 @@ class HeaderControlsMenu extends BaseMenu $this->addItem([ 'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'Modules'), - 'group' => 'admin', 'url' => $this->space->createUrl('/space/manage/module'), 'icon' => '', 'sortOrder' => 300, @@ -80,7 +85,6 @@ class HeaderControlsMenu extends BaseMenu if (!$membership->send_notifications) { $this->addItem([ 'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'Receive Notifications for new content'), - 'group' => 'admin', 'url' => $this->space->createUrl('/space/membership/receive-notifications'), 'icon' => '', 'sortOrder' => 300, @@ -90,7 +94,6 @@ class HeaderControlsMenu extends BaseMenu } else { $this->addItem([ 'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'Don\'t receive notifications for new content'), - 'group' => 'admin', 'url' => $this->space->createUrl('/space/membership/revoke-notifications'), 'icon' => '', 'sortOrder' => 300, @@ -102,7 +105,6 @@ class HeaderControlsMenu extends BaseMenu if (!$this->space->isSpaceOwner() && $this->space->canLeave()) { $this->addItem([ 'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'Cancel Membership'), - 'group' => 'admin', 'url' => $this->space->createUrl('/space/membership/revoke-membership'), 'icon' => '', 'sortOrder' => 300, @@ -115,7 +117,6 @@ class HeaderControlsMenu extends BaseMenu $this->addItem([ 'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'Hide posts on dashboard'), - 'group' => 'admin', 'url' => $this->space->createUrl('/space/membership/switch-dashboard-display', ['show' => 0]), 'icon' => '', 'sortOrder' => 400, @@ -131,7 +132,6 @@ class HeaderControlsMenu extends BaseMenu } else { $this->addItem([ 'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'Show posts on dashboard'), - 'group' => 'admin', 'url' => $this->space->createUrl('/space/membership/switch-dashboard-display', ['show' => 1]), 'icon' => '', 'sortOrder' => 400, diff --git a/protected/humhub/modules/space/widgets/Menu.php b/protected/humhub/modules/space/widgets/Menu.php index 778e0f9263..6e97f29f0d 100755 --- a/protected/humhub/modules/space/widgets/Menu.php +++ b/protected/humhub/modules/space/widgets/Menu.php @@ -8,9 +8,9 @@ namespace humhub\modules\space\widgets; -use humhub\widgets\BaseMenu; use humhub\modules\content\components\ContentContainerController; use humhub\modules\space\models\Space; +use humhub\modules\ui\menu\widgets\LeftNavigation; use Yii; use yii\base\Exception; @@ -18,15 +18,17 @@ use yii\base\Exception; * The Main Navigation for a space. It includes the Modules the Stream * * @author Luke - * @package humhub.modules_core.space.widgets * @since 0.5 */ -class Menu extends BaseMenu +class Menu extends LeftNavigation { + /** @var Space */ public $space; - public $template = '@humhub/widgets/views/leftNavigation'; + /** + * @inheritdoc + */ public function init() { if ($this->space === null && Yii::$app->controller instanceof ContentContainerController && Yii::$app->controller->contentContainer instanceof Space) { @@ -36,14 +38,11 @@ class Menu extends BaseMenu if ($this->space === null) { throw new Exception('Could not instance space menu without space!'); } - + $this->id = 'navigation-menu-space-' . $this->space->getUniqueId(); - $this->addItemGroup([ - 'id' => 'modules', - 'label' => Yii::t('SpaceModule.widgets_SpaceMenuWidget', 'Space menu'), - 'sortOrder' => 100, - ]); + + $this->panelTitle = Yii::t('SpaceModule.widgets_SpaceMenuWidget', 'Space menu'); $this->addItem([ 'label' => Yii::t('SpaceModule.widgets_SpaceMenuWidget', 'Stream'), @@ -61,9 +60,8 @@ class Menu extends BaseMenu * Searches for urls of modules which are activated for the current space * and offer an own site over the space menu. * The urls are associated with a module label. - * - * Returns an array of urls with associated module labes for modules - * @param type $space + * + * Returns an array of urls with associated module labes for modules */ public static function getAvailablePages() { @@ -79,7 +77,7 @@ class Menu extends BaseMenu /** * Returns space default / homepage - * + * * @return string|null the url to redirect or null for default home */ public static function getDefaultPageUrl($space) @@ -102,7 +100,7 @@ class Menu extends BaseMenu /** * Returns space default / homepage - * + * * @return string|null the url to redirect or null for default home */ public static function getGuestsDefaultPageUrl($space) diff --git a/protected/humhub/modules/space/widgets/views/header.php b/protected/humhub/modules/space/widgets/views/header.php index 4138a4ae26..da23003808 100755 --- a/protected/humhub/modules/space/widgets/views/header.php +++ b/protected/humhub/modules/space/widgets/views/header.php @@ -181,10 +181,7 @@ if ($space->isAdmin()) { ['sortOrder' => 30]] ]]); ?> - $space, - 'template' => '@humhub/widgets/views/dropdownNavigation' - ]); + $space]); ?> diff --git a/protected/humhub/modules/ui/menu/MenuEntry.php b/protected/humhub/modules/ui/menu/MenuEntry.php index 248dfe601b..c7ba40a29b 100644 --- a/protected/humhub/modules/ui/menu/MenuEntry.php +++ b/protected/humhub/modules/ui/menu/MenuEntry.php @@ -73,7 +73,7 @@ class MenuEntry extends BaseObject * @var string optional badge (e.g. new item count) not supported by all templates */ protected $badgeText; - + /** * Renders the link tag for this menu entry * diff --git a/protected/humhub/modules/user/widgets/AccountMenu.php b/protected/humhub/modules/user/widgets/AccountMenu.php index e381f659de..a8f8b9b350 100644 --- a/protected/humhub/modules/user/widgets/AccountMenu.php +++ b/protected/humhub/modules/user/widgets/AccountMenu.php @@ -8,9 +8,9 @@ namespace humhub\modules\user\widgets; +use humhub\modules\ui\menu\widgets\LeftNavigation; use Yii; -use \humhub\widgets\BaseMenu; -use \yii\helpers\Url; +use yii\helpers\Url; /** * AccountMenuWidget as (usally left) navigation on users account options. @@ -19,26 +19,21 @@ use \yii\helpers\Url; * @since 0.5 * @author Luke */ -class AccountMenu extends BaseMenu +class AccountMenu extends LeftNavigation { - public $template = "@humhub/widgets/views/leftNavigation"; - public $type = "accountNavigation"; - + /** + * @inheritdoc + */ public function init() { $controllerAction = Yii::$app->controller->action->id; - $this->addItemGroup([ - 'id' => 'account', - 'label' => Yii::t('UserModule.widgets_AccountMenuWidget', 'Account settings'), - 'sortOrder' => 100, - ]); + $this->panelTitle = Yii::t('UserModule.widgets_AccountMenuWidget', 'Account settings'); $this->addItem([ 'label' => Yii::t('UserModule.widgets_AccountMenuWidget', 'Profile'), 'icon' => '', - 'group' => 'account', 'url' => Url::toRoute('/user/account/edit'), 'sortOrder' => 100, 'isActive' => ($controllerAction == "edit" || $controllerAction == "change-email" || $controllerAction == "change-password" || $controllerAction == "delete"), @@ -47,16 +42,14 @@ class AccountMenu extends BaseMenu $this->addItem([ 'label' => Yii::t('UserModule.account', 'E-Mail Summaries'), 'icon' => '', - 'group' => 'account', 'url' => Url::toRoute('/activity/user'), 'sortOrder' => 105, 'isActive' => (Yii::$app->controller->module->id == 'activity'), ]); - + $this->addItem([ 'label' => Yii::t('UserModule.account', 'Notifications'), 'icon' => '', - 'group' => 'account', 'url' => Url::toRoute('/notification/user'), 'sortOrder' => 106, 'isActive' => (Yii::$app->controller->module->id == 'notification'), @@ -65,7 +58,6 @@ class AccountMenu extends BaseMenu $this->addItem([ 'label' => Yii::t('UserModule.widgets_AccountMenuWidget', 'Settings'), 'icon' => '', - 'group' => 'account', 'url' => Url::toRoute('/user/account/edit-settings'), 'sortOrder' => 110, 'isActive' => ($controllerAction == "edit-settings"), @@ -74,7 +66,6 @@ class AccountMenu extends BaseMenu $this->addItem([ 'label' => Yii::t('UserModule.widgets_AccountMenuWidget', 'Security'), 'icon' => '', - 'group' => 'account', 'url' => Url::toRoute('/user/account/security'), 'sortOrder' => 115, 'isActive' => (Yii::$app->controller->action->id == "security"), @@ -85,7 +76,6 @@ class AccountMenu extends BaseMenu $this->addItem([ 'label' => Yii::t('UserModule.widgets_AccountMenuWidget', 'Modules'), 'icon' => '', - 'group' => 'account', 'url' => Url::toRoute('//user/account/edit-modules'), 'sortOrder' => 120, 'isActive' => (Yii::$app->controller->action->id == "edit-modules"), diff --git a/protected/humhub/modules/user/widgets/AccountProfilMenu.php b/protected/humhub/modules/user/widgets/AccountProfilMenu.php index 14cad4d264..e45c686fcf 100644 --- a/protected/humhub/modules/user/widgets/AccountProfilMenu.php +++ b/protected/humhub/modules/user/widgets/AccountProfilMenu.php @@ -8,20 +8,16 @@ namespace humhub\modules\user\widgets; +use humhub\modules\ui\menu\widgets\TabMenu; use Yii; use yii\helpers\Url; /** * Account Settings Tab Menu */ -class AccountProfilMenu extends \humhub\widgets\BaseMenu +class AccountProfilMenu extends TabMenu { - /** - * @inheritdoc - */ - public $template = "@humhub/widgets/views/tabMenu"; - /** * @inheritdoc */ @@ -66,8 +62,9 @@ class AccountProfilMenu extends \humhub\widgets\BaseMenu /** * Returns optional authclients - * + * * @return \yii\authclient\ClientInterface[] + * @throws \yii\base\InvalidConfigException */ protected function getSecondoaryAuthProviders() { diff --git a/protected/humhub/modules/user/widgets/AccountSettingsMenu.php b/protected/humhub/modules/user/widgets/AccountSettingsMenu.php index 4cddeb6be9..f1fd600beb 100644 --- a/protected/humhub/modules/user/widgets/AccountSettingsMenu.php +++ b/protected/humhub/modules/user/widgets/AccountSettingsMenu.php @@ -8,20 +8,16 @@ namespace humhub\modules\user\widgets; +use humhub\modules\ui\menu\widgets\TabMenu; use Yii; use yii\helpers\Url; /** * Account Settings Tab Menu */ -class AccountSettingsMenu extends \humhub\widgets\BaseMenu +class AccountSettingsMenu extends TabMenu { - /** - * @inheritdoc - */ - public $template = "@humhub/widgets/views/tabMenu"; - /** * @inheritdoc */ @@ -49,8 +45,9 @@ class AccountSettingsMenu extends \humhub\widgets\BaseMenu /** * Returns optional authclients - * + * * @return \yii\authclient\ClientInterface[] + * @throws \yii\base\InvalidConfigException */ protected function getSecondaryAuthProviders() { diff --git a/protected/humhub/modules/user/widgets/AccountTopMenu.php b/protected/humhub/modules/user/widgets/AccountTopMenu.php index d6bb5c936a..f10cee608a 100644 --- a/protected/humhub/modules/user/widgets/AccountTopMenu.php +++ b/protected/humhub/modules/user/widgets/AccountTopMenu.php @@ -8,16 +8,16 @@ namespace humhub\modules\user\widgets; +use humhub\modules\ui\menu\widgets\Menu; use Yii; use yii\helpers\Url; -use humhub\widgets\BaseMenu; /** * AccountTopMenu Widget * * @author luke */ -class AccountTopMenu extends BaseMenu +class AccountTopMenu extends Menu { /** diff --git a/protected/humhub/modules/user/widgets/ProfileMenu.php b/protected/humhub/modules/user/widgets/ProfileMenu.php index 7cfa746221..ed36f0aa0c 100644 --- a/protected/humhub/modules/user/widgets/ProfileMenu.php +++ b/protected/humhub/modules/user/widgets/ProfileMenu.php @@ -8,9 +8,10 @@ namespace humhub\modules\user\widgets; -use Yii; +use humhub\modules\ui\menu\widgets\LeftNavigation; use humhub\modules\user\models\User; use humhub\modules\user\permissions\ViewAboutPage; +use Yii; /** * ProfileMenuWidget shows the (usually left) navigation on user profiles. @@ -24,7 +25,7 @@ use humhub\modules\user\permissions\ViewAboutPage; * @since 0.5 * @author Luke */ -class ProfileMenu extends \humhub\widgets\BaseMenu +class ProfileMenu extends LeftNavigation { /** @@ -32,25 +33,17 @@ class ProfileMenu extends \humhub\widgets\BaseMenu */ public $user; - /** - * @inheritdoc - */ - public $template = "@humhub/widgets/views/leftNavigation"; /** * @inheritdoc */ public function init() { - $this->addItemGroup([ - 'id' => 'profile', - 'label' => Yii::t('UserModule.widgets_ProfileMenuWidget', 'Profile menu'), - 'sortOrder' => 100, - ]); + + $this->panelTitle = Yii::t('UserModule.widgets_ProfileMenuWidget', 'Profile menu'); $this->addItem([ 'label' => Yii::t('UserModule.widgets_ProfileMenuWidget', 'Stream'), - 'group' => 'profile', 'icon' => '', 'url' => $this->user->createUrl('//user/profile/home'), 'sortOrder' => 200, @@ -60,7 +53,6 @@ class ProfileMenu extends \humhub\widgets\BaseMenu if ($this->user->permissionManager->can(new ViewAboutPage())) { $this->addItem([ 'label' => Yii::t('UserModule.widgets_ProfileMenuWidget', 'About'), - 'group' => 'profile', 'icon' => '', 'url' => $this->user->createUrl('//user/profile/about'), 'sortOrder' => 300, diff --git a/protected/humhub/widgets/FooterMenu.php b/protected/humhub/widgets/FooterMenu.php index 681de29679..1c994d5766 100644 --- a/protected/humhub/widgets/FooterMenu.php +++ b/protected/humhub/widgets/FooterMenu.php @@ -8,13 +8,15 @@ namespace humhub\widgets; +use humhub\modules\ui\menu\widgets\Menu; + /** * FooterMenu displays a footer navigation for pages e.g. Imprint * * @since 1.2.6 * @author Luke */ -class FooterMenu extends BaseMenu +class FooterMenu extends Menu { const LOCATION_ACCOUNT_MENU = 'account_menu'; const LOCATION_LOGIN = 'login'; @@ -59,14 +61,11 @@ class FooterMenu extends BaseMenu /** * @inheritdoc */ - public function run() + protected function getViewParams() { - $this->trigger(self::EVENT_RUN); - - return $this->render($this->template, [ - 'items' => $this->getItems(), - 'location' => $this->location, - 'numItems' => count($this->getItems()) - ]); + $params = parent::getViewParams(); + $params['location'] = $this->location; + return $params; } + } diff --git a/protected/humhub/widgets/TopMenu.php b/protected/humhub/widgets/TopMenu.php index 20ed5e8054..02c252b7f1 100644 --- a/protected/humhub/widgets/TopMenu.php +++ b/protected/humhub/widgets/TopMenu.php @@ -8,6 +8,7 @@ namespace humhub\widgets; +use humhub\modules\ui\menu\widgets\Menu; use Yii; use humhub\modules\user\components\User; @@ -17,18 +18,19 @@ use humhub\modules\user\components\User; * @since 0.5 * @author Luke */ -class TopMenu extends BaseMenu +class TopMenu extends Menu { + /** + * @inheritdoc + */ + public $id = 'top-menu-nav'; + /** * @inheritdoc */ public $template = 'topNavigation'; - /** - * @inheritdoc - */ - public $id = 'top-menu-nav'; /** * @inheritdoc @@ -43,4 +45,6 @@ class TopMenu extends BaseMenu } } + + } From 6e474ab4eeb69cf9b583c5cfee087df8d4fbfb93 Mon Sep 17 00:00:00 2001 From: Lucas Bartholemy Date: Thu, 6 Dec 2018 17:24:19 +0100 Subject: [PATCH 04/17] Removed old menu classes --- protected/humhub/widgets/BaseMenu.php | 348 +----------------- .../widgets/views/dropdownNavigation.php | 32 -- .../humhub/widgets/views/leftNavigation.php | 29 -- protected/humhub/widgets/views/subTabMenu.php | 16 - protected/humhub/widgets/views/tabMenu.php | 19 - 5 files changed, 6 insertions(+), 438 deletions(-) delete mode 100644 protected/humhub/widgets/views/dropdownNavigation.php delete mode 100644 protected/humhub/widgets/views/leftNavigation.php delete mode 100644 protected/humhub/widgets/views/subTabMenu.php delete mode 100644 protected/humhub/widgets/views/tabMenu.php diff --git a/protected/humhub/widgets/BaseMenu.php b/protected/humhub/widgets/BaseMenu.php index 27122fee34..3064c6ba5c 100644 --- a/protected/humhub/widgets/BaseMenu.php +++ b/protected/humhub/widgets/BaseMenu.php @@ -8,352 +8,16 @@ namespace humhub\widgets; -use Yii; -use yii\base\Widget; -use yii\helpers\Url; -use yii\base\Event; -use yii\web\View; + +use humhub\modules\ui\menu\widgets\Menu; /** * BaseMenu is the base class for navigations. + * + * @deprecated since 1.4 + * @see Menu */ -class BaseMenu extends Widget +class BaseMenu extends Menu { - const EVENT_INIT = 'init'; - const EVENT_RUN = 'run'; - - /** - * - * @var array of items - */ - public $items = []; - - /** - * - * @var array of item groups - */ - public $itemGroups = []; - - /** - * - * @var string type of the navigation, optional for identifing. - */ - public $type = ''; - - /** - * @var string dom element id - * @since 1.2 - */ - public $id; - - /** - * Template of the navigation - * - * Available default template views: - * - leftNavigation - * - tabMenu - * - * @var string template file - */ - public $template; - - /** - * Initializes the navigation widget. - * This method mainly normalizes the {@link items} property. - * If this method is overridden, make sure the parent implementation is invoked. - */ - public function init() - { - $this->addItemGroup([ - 'id' => '', - 'label' => '' - ]); - - // Yii 2.0.11 introduced own init event - if (version_compare(Yii::getVersion(), '2.0.11', '<')) { - $this->trigger(self::EVENT_INIT); - } - - return parent::init(); - } - - /** - * Adds new Item to the menu - * - * @param array $item - * with item definitions - */ - public function addItem($item) - { - if (!isset($item['label'])) { - $item['label'] = 'Unnamed'; - } - - if (!isset($item['url'])) { - $item['url'] = '#'; - } - - if (!isset($item['icon'])) { - $item['icon'] = ''; - } - - if (!isset($item['group'])) { - $item['group'] = ''; - } - - if (!isset($item['htmlOptions'])) { - $item['htmlOptions'] = []; - } - - if (!isset($item['pjax'])) { - $item['pjax'] = true; - } - - /** - * - * @deprecated since version 0.11 use directly htmlOptions instead - */ - if (isset($item['target'])) { - $item['htmlOptions']['target'] = $item['target']; - } - - if (!isset($item['sortOrder'])) { - $item['sortOrder'] = 1000; - } - - if (!isset($item['newItemCount'])) { - $item['newItemCount'] = 0; - } - - if (!isset($item['isActive'])) { - $item['isActive'] = false; - } - if (isset($item['isVisible']) && !$item['isVisible']) { - return; - } - - // Build Item CSS Class - if (!isset($item['htmlOptions']['class'])) { - $item['htmlOptions']['class'] = ''; - } - - if ($item['isActive']) { - $item['htmlOptions']['class'] .= ' active'; - } - - if (isset($item['id'])) { - $item['htmlOptions']['class'] .= ' ' . $item['id']; - } - - $this->items[] = $item; - } - - /** - * Adds new Item Group to the menu - * - * @param array $itemGroup - * with group definition - */ - public function addItemGroup($itemGroup) - { - if (!isset($itemGroup['id'])) { - $itemGroup['id'] = 'default'; - } - - if (!isset($itemGroup['label'])) { - $itemGroup['label'] = 'Unnamed'; - } - - if (!isset($itemGroup['icon'])) { - $itemGroup['icon'] = ''; - } - - if (!isset($itemGroup['sortOrder'])) { - $itemGroup['sortOrder'] = 1000; - } - - if (isset($itemGroup['isVisible']) && !$itemGroup['isVisible']) { - return; - } - - $this->itemGroups[] = $itemGroup; - } - - /** - * Returns Items of this Navigation - * - * @param string $group - * limits the items to a specified group - * @return array a list of items with definition - */ - public function getItems($group = '') - { - $this->sortItems(); - - $ret = []; - - foreach ($this->items as $item) { - if ($group == $item['group']) - $ret[] = $item; - } - - return $ret; - } - - /** - * Sorts the item attribute by sortOrder - */ - private function sortItems() - { - usort($this->items, function ($a, $b) { - if ($a['sortOrder'] == $b['sortOrder']) { - return 0; - } elseif ($a['sortOrder'] < $b['sortOrder']) { - return - 1; - } else { - return 1; - } - }); - } - - /** - * Sorts Item Groups by sortOrder Field - */ - private function sortItemGroups() - { - usort($this->itemGroups, function ($a, $b) { - if ($a['sortOrder'] == $b['sortOrder']) { - return 0; - } elseif ($a['sortOrder'] < $b['sortOrder']) { - return - 1; - } else { - return 1; - } - }); - } - - /** - * Returns all Item Groups - * - * @return array of item group definitions - */ - public function getItemGroups() - { - $this->sortItemGroups(); - return $this->itemGroups; - } - - /** - * Executes the Menu Widget - */ - public function run() - { - $this->trigger(self::EVENT_RUN); - - if (empty($this->template)) { - return; - } - - return $this->render($this->template, []); - } - - /** - * Activates the menu item with the given url - * @param type $url - */ - public function setActive($url) - { - foreach ($this->items as $key => $item) { - if ($item['url'] == $url) { - $this->items[$key]['htmlOptions']['class'] = 'active'; - $this->items[$key]['isActive'] = true; - $this->view->registerJs('humhub.modules.ui.navigation.setActive("' . $this->id . '", ' . json_encode($this->items[$key]) . ');', View::POS_END, 'active-' . $this->id); - } - } - } - - public function getActive() - { - foreach ($this->items as $item) { - if ($item['isActive']) { - return $item; - } - } - } - - /* - * Deactivates the menu item with the given url - */ - - public function setInactive($url) - { - foreach ($this->items as $key => $item) { - if ($item['url'] == $url) { - $this->items[$key]['htmlOptions']['class'] = ''; - $this->items[$key]['isActive'] = false; - } - } - } - - /** - * Add the active class from a menue item. - * - * @param string $url - * the URL of the item to mark. You can use Url::toRoute(...) to generate it. - */ - public static function markAsActive($url) - { - if (is_array($url)) { - $url = Url::to($url); - } - - Event::on(static::className(), static::EVENT_RUN, function ($event) use ($url) { - $event->sender->setActive($url); - }); - } - - /** - * This function is used in combination with pjax to get sure the required menu is active - */ - public static function setViewState() - { - $instance = new static(); - if (!empty($instance->id)) { - $active = $instance->getActive(); - $instance->view->registerJs('humhub.modules.ui.navigation.setActive("' . $instance->id . '", ' . json_encode($active) . ');', \yii\web\View::POS_END, 'active-' . $instance->id); - } - } - - /** - * Remove the active class from a menue item. - * - * @param string $url - * the URL of the item to mark. You can use Url::toRoute(...) to generate it. - */ - public static function markAsInactive($url) - { - if (is_array($url)) { - $url = Url::to($url); - } - - Event::on(static::className(), static::EVENT_RUN, function ($event) use ($url) { - $event->sender->setInactive($url); - }); - } - - /** - * Removes Item by URL - * - * @param string $url - */ - public function deleteItemByUrl($url) - { - foreach ($this->items as $key => $item) { - if ($item['url'] == $url) { - unset($this->items[$key]); - } - } - } - } diff --git a/protected/humhub/widgets/views/dropdownNavigation.php b/protected/humhub/widgets/views/dropdownNavigation.php deleted file mode 100644 index 64f58f7310..0000000000 --- a/protected/humhub/widgets/views/dropdownNavigation.php +++ /dev/null @@ -1,32 +0,0 @@ - -context->getItemGroups() as $group) : ?> - - context->getItems($group['id']); ?> - - - - diff --git a/protected/humhub/widgets/views/leftNavigation.php b/protected/humhub/widgets/views/leftNavigation.php deleted file mode 100644 index 53121f8c2e..0000000000 --- a/protected/humhub/widgets/views/leftNavigation.php +++ /dev/null @@ -1,29 +0,0 @@ - - - -
- context->getItemGroups() as $group) : ?> - - context->getItems($group['id']); ?> - - - -
- -
- - - " . $item['label'] . "", $item['url'], $item['htmlOptions']); ?> - -
- - -
- diff --git a/protected/humhub/widgets/views/subTabMenu.php b/protected/humhub/widgets/views/subTabMenu.php deleted file mode 100644 index 69198582d2..0000000000 --- a/protected/humhub/widgets/views/subTabMenu.php +++ /dev/null @@ -1,16 +0,0 @@ - - diff --git a/protected/humhub/widgets/views/tabMenu.php b/protected/humhub/widgets/views/tabMenu.php deleted file mode 100644 index d1095c08d0..0000000000 --- a/protected/humhub/widgets/views/tabMenu.php +++ /dev/null @@ -1,19 +0,0 @@ - -
- - -
\ No newline at end of file From 3b00910f9aca3b66011c7f5201d2fa50630633c7 Mon Sep 17 00:00:00 2001 From: Lucas Bartholemy Date: Thu, 6 Dec 2018 17:41:05 +0100 Subject: [PATCH 05/17] Added ext-json as requirement to the composer.json --- composer.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index e0fa7f7a19..4b3d93ee1c 100644 --- a/composer.json +++ b/composer.json @@ -59,7 +59,8 @@ "yiisoft/yii2-redis": "~2.0.0", "yiisoft/yii2-swiftmailer": "~2.0.0", "zendframework/zend-http": "*", - "zendframework/zend-ldap": "^2.5" + "zendframework/zend-ldap": "^2.5", + "ext-json": "*" }, "require-dev": { "codeception/codeception": "2.4.5", From bdea33049d06e71774524fa8de8c9757c337eb63 Mon Sep 17 00:00:00 2001 From: Lucas Bartholemy Date: Thu, 6 Dec 2018 17:56:36 +0100 Subject: [PATCH 06/17] Cleanup TopMenu template --- protected/humhub/widgets/TopMenu.php | 2 +- .../humhub/widgets/views/topNavigation.php | 29 +++++++++---------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/protected/humhub/widgets/TopMenu.php b/protected/humhub/widgets/TopMenu.php index 02c252b7f1..a405b940f3 100644 --- a/protected/humhub/widgets/TopMenu.php +++ b/protected/humhub/widgets/TopMenu.php @@ -8,8 +8,8 @@ namespace humhub\widgets; -use humhub\modules\ui\menu\widgets\Menu; use Yii; +use humhub\modules\ui\menu\widgets\Menu; use humhub\modules\user\components\User; /** diff --git a/protected/humhub/widgets/views/topNavigation.php b/protected/humhub/widgets/views/topNavigation.php index dd03d6e681..146a5802b3 100755 --- a/protected/humhub/widgets/views/topNavigation.php +++ b/protected/humhub/widgets/views/topNavigation.php @@ -2,29 +2,28 @@ use yii\helpers\Html; +/* @var $this \humhub\components\View */ +/* @var $menu \humhub\widgets\TopMenu */ +/* @var $entries \humhub\modules\ui\menu\MenuEntry[] */ ?> -context->getItems() as $item) : ?> -
  • - " . $item['label'], $item['url'], $item['htmlOptions']); ?> + + +
  • + getIcon() . "
    " . $entry->getLabel(), $entry->getUrl(), $entry->getHtmlOptions()); ?>
  • \ No newline at end of file + From 1619e87982beda5bc22f92dbcc3c5a9ebb27852d Mon Sep 17 00:00:00 2001 From: Lucas Bartholemy Date: Thu, 6 Dec 2018 17:58:55 +0100 Subject: [PATCH 07/17] Fix removeEntry --- protected/humhub/modules/ui/menu/widgets/Menu.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protected/humhub/modules/ui/menu/widgets/Menu.php b/protected/humhub/modules/ui/menu/widgets/Menu.php index 7a544249aa..f5274ca78a 100644 --- a/protected/humhub/modules/ui/menu/widgets/Menu.php +++ b/protected/humhub/modules/ui/menu/widgets/Menu.php @@ -62,7 +62,7 @@ class Menu extends Widget { foreach ($this->entries as $i => $e) { if ($e === $entry) { - unset($entry[$i]); + unset($this->entries[$i]); return true; } } From be284abb041bc48fc3af0afdfc7163441322f919 Mon Sep 17 00:00:00 2001 From: Lucas Bartholemy Date: Mon, 10 Dec 2018 12:13:35 +0100 Subject: [PATCH 08/17] Mark sub base classes abstract --- protected/humhub/modules/ui/menu/widgets/DropDownMenu.php | 2 +- protected/humhub/modules/ui/menu/widgets/LeftNavigation.php | 2 +- protected/humhub/modules/ui/menu/widgets/Menu.php | 2 +- protected/humhub/modules/ui/menu/widgets/SubTabMenu.php | 2 +- protected/humhub/modules/ui/menu/widgets/TabMenu.php | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/protected/humhub/modules/ui/menu/widgets/DropDownMenu.php b/protected/humhub/modules/ui/menu/widgets/DropDownMenu.php index d91e20f6bf..3df4d156a0 100644 --- a/protected/humhub/modules/ui/menu/widgets/DropDownMenu.php +++ b/protected/humhub/modules/ui/menu/widgets/DropDownMenu.php @@ -14,7 +14,7 @@ namespace humhub\modules\ui\menu\widgets; * @since 1.4 * @package humhub\modules\ui\menu\widgets */ -class DropDownMenu extends Menu +abstract class DropDownMenu extends Menu { /** * @var string the label of the dropdown button diff --git a/protected/humhub/modules/ui/menu/widgets/LeftNavigation.php b/protected/humhub/modules/ui/menu/widgets/LeftNavigation.php index 1444f67dc3..f0461ac6ea 100644 --- a/protected/humhub/modules/ui/menu/widgets/LeftNavigation.php +++ b/protected/humhub/modules/ui/menu/widgets/LeftNavigation.php @@ -14,7 +14,7 @@ namespace humhub\modules\ui\menu\widgets; * @since 1.4 * @package humhub\modules\ui\menu\widgets */ -class LeftNavigation extends Menu +abstract class LeftNavigation extends Menu { /** * @var string the title of the panel diff --git a/protected/humhub/modules/ui/menu/widgets/Menu.php b/protected/humhub/modules/ui/menu/widgets/Menu.php index f5274ca78a..c69d92cb52 100644 --- a/protected/humhub/modules/ui/menu/widgets/Menu.php +++ b/protected/humhub/modules/ui/menu/widgets/Menu.php @@ -20,7 +20,7 @@ use yii\web\View; * @since 1.4 * @package humhub\modules\ui\widgets */ -class Menu extends Widget +abstract class Menu extends Widget { /** * @event MenuEvent an event raised before running the navigation widget. diff --git a/protected/humhub/modules/ui/menu/widgets/SubTabMenu.php b/protected/humhub/modules/ui/menu/widgets/SubTabMenu.php index d3af903233..d034f2c752 100644 --- a/protected/humhub/modules/ui/menu/widgets/SubTabMenu.php +++ b/protected/humhub/modules/ui/menu/widgets/SubTabMenu.php @@ -14,7 +14,7 @@ namespace humhub\modules\ui\menu\widgets; * @sicne 1.4 * @package humhub\modules\ui\menu\widgets */ -class SubTabMenu extends Menu +abstract class SubTabMenu extends Menu { /** * @var string the title of the panel diff --git a/protected/humhub/modules/ui/menu/widgets/TabMenu.php b/protected/humhub/modules/ui/menu/widgets/TabMenu.php index 64c905fb6f..32cc253e79 100644 --- a/protected/humhub/modules/ui/menu/widgets/TabMenu.php +++ b/protected/humhub/modules/ui/menu/widgets/TabMenu.php @@ -14,7 +14,7 @@ namespace humhub\modules\ui\menu\widgets; * @since 1.4 * @package humhub\modules\ui\menu\widgets */ -class TabMenu extends Menu +abstract class TabMenu extends Menu { /** * @inheritdoc From e9e15a26f5f2b01ed4feda8e4700522327efc8a6 Mon Sep 17 00:00:00 2001 From: Lucas Bartholemy Date: Mon, 10 Dec 2018 12:14:51 +0100 Subject: [PATCH 09/17] Fixed MenuEntry manipulation --- protected/humhub/modules/dashboard/Events.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/protected/humhub/modules/dashboard/Events.php b/protected/humhub/modules/dashboard/Events.php index 6ac330214c..ce75cf51da 100644 --- a/protected/humhub/modules/dashboard/Events.php +++ b/protected/humhub/modules/dashboard/Events.php @@ -14,6 +14,7 @@ use humhub\modules\ui\menu\events\MenuEvent; use humhub\modules\ui\menu\MenuEntry; use humhub\widgets\TopMenu; use Yii; +use yii\base\Event; use yii\helpers\Url; /** @@ -28,22 +29,21 @@ class Events * TopMenu init event callback * * @see TopMenu - * @param MenuEvent $event + * @param Event $event */ public static function onTopMenuInit($event) { + /** @var TopMenu $topMenu */ $topMenu = $event->sender; $entry = new MenuEntry(); - $entry->id = 'dashboard'; - $entry->label = Yii::t('DashboardModule.base', 'Dashboard'); - $entry->url = Url::to(['/dashboard/dashboard']); - $entry->icon = new Icon(['name' => 'tachometer']); - $entry->sortOrder = 100; - $entry->isActive = function () { - return (Yii::$app->controller->module && Yii::$app->controller->module->id === 'dashboard'); - }; + $entry->setId('dashboard'); + $entry->setLabel(Yii::t('DashboardModule.base', 'Dashboard')); + $entry->setUrl(['/dashboard/dashboard']); + $entry->setIcon(new Icon(['name' => 'tachometer'])); + $entry->setSortOrder(100); + $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id === 'dashboard')); $topMenu->addEntry($entry); } From 534225cac7955b21ca0afaa7f1f5a648d3d3cfe2 Mon Sep 17 00:00:00 2001 From: Lucas Bartholemy Date: Mon, 10 Dec 2018 14:51:20 +0100 Subject: [PATCH 10/17] Updated menu doc --- .../humhub/docs/guide/developer/README.md | 1 + .../humhub/docs/guide/developer/menus.md | 109 ++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 protected/humhub/docs/guide/developer/menus.md diff --git a/protected/humhub/docs/guide/developer/README.md b/protected/humhub/docs/guide/developer/README.md index 8e4cd96b12..ebbca87fbb 100644 --- a/protected/humhub/docs/guide/developer/README.md +++ b/protected/humhub/docs/guide/developer/README.md @@ -29,6 +29,7 @@ Basic Concepts * [Activities](activities.md) * [File Handling](files.md) * [Widgets](widgets.md) +* [Menus and Navigations](menus.md) * [Snippets](snippet.md) * [Internationalization](i18n.md) diff --git a/protected/humhub/docs/guide/developer/menus.md b/protected/humhub/docs/guide/developer/menus.md new file mode 100644 index 0000000000..e56b315567 --- /dev/null +++ b/protected/humhub/docs/guide/developer/menus.md @@ -0,0 +1,109 @@ +Menus and Navigations +===================== + +All menus and navigation widgets are derived from the widget class [[humhub\modules\ui\menu\widgets\Menu]]. + +Additionally, there are following sub base classes with predefined templates available: + +- [[humhub\modules\ui\menu\widgets\LeftNavigation]] +- [[humhub\modules\ui\menu\widgets\TabMenu]] +- [[humhub\modules\ui\menu\widgets\SubTabMenu]] +- [[humhub\modules\ui\menu\widgets\DropDownMenu]] + + +Based on these base classes, following menu implementations are most frequently used: + +- TopMenu (Main navigation with entries like Dashboard/Directory) - [[humhub\widgets\TopMenu]] +- FooterMenu - [[humhub\widgets\FooterMenu]] +- AdminMenu - Administrative Section - [[humhub\modules\admin\widgets\AdminMenu]] +- AccountMenu - [[humhub\modules\user\widgets\AccountTopMenu]] + + +Menu entries are represented by the class [[humhub\modules\ui\menu\MenuEntry]]. +Instances of this class can be added via the menu class. + +See the [[humhub\modules\ui\menu\MenuEntry]] class for a full list of properties and options. + + +Events +------ + +The menu allow you to manipulate menu entries at certain execution points using events. + +You can use all Yii2 widget events to interact with the menu class. + + +Example of the modules **config.php**: + +```php +return [ + 'id' => 'example', + 'class' => Module::class, + 'events' => [ + ['class' => TopMenu::class, 'event' => TopMenu::EVENT_INIT, 'callback' => ['\humhub\modules\example\Events', 'onTopMenuInit']], + ] +]; +``` + + +Example of a callback: + + +```php + +namespace humhub\modules\example; + +use humhub\modules\dashboard\widgets\ShareWidget; +use humhub\modules\ui\widgets\Icon; +use humhub\modules\ui\menu\MenuEntry; +use humhub\widgets\TopMenu; + +use Yii; +use yii\base\Event; +use yii\helpers\Url; + +/** + * Description of Events + * + * @author luke + */ +class Events +{ + + /** + * TopMenu init event callback + * + * @see TopMenu + * @param Event $event + */ + public static function onTopMenuInit($event) + { + /** @var TopMenu $topMenu */ + $topMenu = $event->sender; + + $entry = new MenuEntry(); + + $entry->setId('dashboard'); + $entry->setLabel(Yii::t('DashboardModule.base', 'Dashboard')); + $entry->setUrl(['/dashboard/dashboard']); + $entry->setIcon(new Icon(['name' => 'tachometer'])); + $entry->setSortOrder(100); + $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id === 'dashboard')); + + $topMenu->addEntry($entry); + } + +} + + +``` + + +ToDos +----- + +- Add UnitTesting +- Allow submenus +- Separator Entry support +- Location for Footer/TopMenu sources? Move into UI module? +- PanelMenu Cleanup From 55498b1eee2b68b824986a3a52046304f5ff02ab Mon Sep 17 00:00:00 2001 From: buddh4 Date: Sat, 15 Dec 2018 19:26:26 +0100 Subject: [PATCH 11/17] Enh: Added Icon abstraction layer --- protected/humhub/components/Widget.php | 2 + protected/humhub/docs/CHANGELOG_DEV.md | 2 +- .../modules/admin/widgets/AdminMenu.php | 12 +- protected/humhub/modules/dashboard/Events.php | 6 +- .../ui/form/validators/IconValidator.php | 3 +- .../modules/ui/form/widgets/IconPicker.php | 603 +------------- .../ui/icon/FontAwesomeIconFactory.php | 120 +++ .../humhub/modules/ui/icon/IconFactory.php | 50 ++ .../humhub/modules/ui/icon/widgets/Icon.php | 779 ++++++++++++++++++ .../humhub/modules/ui/menu/MenuEntry.php | 6 +- protected/humhub/modules/ui/widgets/Icon.php | 55 -- static/less/humhub.less | 5 + static/less/icon.less | 41 + themes/HumHub/css/theme.css | 2 +- 14 files changed, 1026 insertions(+), 660 deletions(-) create mode 100644 protected/humhub/modules/ui/icon/FontAwesomeIconFactory.php create mode 100644 protected/humhub/modules/ui/icon/IconFactory.php create mode 100644 protected/humhub/modules/ui/icon/widgets/Icon.php delete mode 100644 protected/humhub/modules/ui/widgets/Icon.php create mode 100644 static/less/icon.less diff --git a/protected/humhub/components/Widget.php b/protected/humhub/components/Widget.php index 5a42a15ad7..1d39d2ed2c 100644 --- a/protected/humhub/components/Widget.php +++ b/protected/humhub/components/Widget.php @@ -13,6 +13,8 @@ use humhub\libs\WidgetCreateEvent; /** * @inheritdoc + * + * @property-read \humhub\modules\ui\view\components\View $view */ class Widget extends \yii\base\Widget { diff --git a/protected/humhub/docs/CHANGELOG_DEV.md b/protected/humhub/docs/CHANGELOG_DEV.md index 9f434507af..81808f0c9c 100644 --- a/protected/humhub/docs/CHANGELOG_DEV.md +++ b/protected/humhub/docs/CHANGELOG_DEV.md @@ -7,7 +7,7 @@ HumHub Change Log (DEVELOP) - Enh: GroupPermissionManager - allow to query users by given permission - Enh: Automatic migrate DB collations from utf8 to utf8mb4 -- Enh: Added Icon widget as wrapper class +- Enh: Added Icon abstraction layer diff --git a/protected/humhub/modules/admin/widgets/AdminMenu.php b/protected/humhub/modules/admin/widgets/AdminMenu.php index 8cd7cde2bc..17293d2e3a 100644 --- a/protected/humhub/modules/admin/widgets/AdminMenu.php +++ b/protected/humhub/modules/admin/widgets/AdminMenu.php @@ -8,9 +8,9 @@ namespace humhub\modules\admin\widgets; +use humhub\modules\ui\icon\widgets\Icon; use humhub\modules\ui\menu\MenuEntry; use humhub\modules\ui\menu\widgets\LeftNavigation; -use humhub\modules\ui\widgets\Icon; use Yii; /** @@ -36,7 +36,7 @@ class AdminMenu extends LeftNavigation $entry = new MenuEntry(); $entry->setLabel(Yii::t('AdminModule.widgets_AdminMenuWidget', 'Users')); $entry->setUrl(['/admin/user']); - $entry->setIcon(new Icon(['name' => 'user'])); + $entry->setIcon('user'); $entry->setSortOrder(200); $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && (Yii::$app->controller->id == 'user' || Yii::$app->controller->id == 'group' || Yii::$app->controller->id == 'approval' || Yii::$app->controller->id == 'authentication' || Yii::$app->controller->id == 'user-profile' || Yii::$app->controller->id == 'pending-registrations'))); $entry->setIsVisible(Yii::$app->user->can([ @@ -49,7 +49,7 @@ class AdminMenu extends LeftNavigation $entry = new MenuEntry(); $entry->setLabel(Yii::t('AdminModule.widgets_AdminMenuWidget', 'Spaces')); $entry->setUrl(['/admin/space']); - $entry->setIcon(new Icon(['name' => 'inbox'])); + $entry->setIcon('inbox'); $entry->setSortOrder(400); $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'space')); $entry->setIsVisible(Yii::$app->user->can([ @@ -61,7 +61,7 @@ class AdminMenu extends LeftNavigation $entry = new MenuEntry(); $entry->setLabel(Yii::t('AdminModule.widgets_AdminMenuWidget', 'Modules')); $entry->setUrl(['/admin/module']); - $entry->setIcon(new Icon(['name' => 'rocket'])); + $entry->setIcon('rocket'); $entry->setSortOrder(500); $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'module')); $entry->setIsVisible(Yii::$app->user->can(new \humhub\modules\admin\permissions\ManageModules())); @@ -70,7 +70,7 @@ class AdminMenu extends LeftNavigation $entry = new MenuEntry(); $entry->setLabel(Yii::t('AdminModule.widgets_AdminMenuWidget', 'Settings')); $entry->setUrl(['/admin/setting']); - $entry->setIcon(new Icon(['name' => 'gears'])); + $entry->setIcon('gears'); $entry->setSortOrder(600); $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id == 'setting')); $entry->setIsVisible(Yii::$app->user->can(new \humhub\modules\admin\permissions\ManageSettings())); @@ -79,7 +79,7 @@ class AdminMenu extends LeftNavigation $entry = new MenuEntry(); $entry->setLabel(Yii::t('AdminModule.widgets_AdminMenuWidget', 'Information')); $entry->setUrl(['/admin/information']); - $entry->setIcon(new Icon(['name' => 'info-circle'])); + $entry->setIcon('info-circle'); $entry->setSortOrder(1000); $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'information')); $entry->setIsVisible(Yii::$app->user->can(new \humhub\modules\admin\permissions\SeeAdminInformation())); diff --git a/protected/humhub/modules/dashboard/Events.php b/protected/humhub/modules/dashboard/Events.php index ce75cf51da..ecd72d500c 100644 --- a/protected/humhub/modules/dashboard/Events.php +++ b/protected/humhub/modules/dashboard/Events.php @@ -8,14 +8,10 @@ namespace humhub\modules\dashboard; -use humhub\modules\dashboard\widgets\ShareWidget; -use humhub\modules\ui\widgets\Icon; -use humhub\modules\ui\menu\events\MenuEvent; use humhub\modules\ui\menu\MenuEntry; use humhub\widgets\TopMenu; use Yii; use yii\base\Event; -use yii\helpers\Url; /** * Description of Events @@ -41,7 +37,7 @@ class Events $entry->setId('dashboard'); $entry->setLabel(Yii::t('DashboardModule.base', 'Dashboard')); $entry->setUrl(['/dashboard/dashboard']); - $entry->setIcon(new Icon(['name' => 'tachometer'])); + $entry->setIcon('tachometer'); $entry->setSortOrder(100); $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id === 'dashboard')); diff --git a/protected/humhub/modules/ui/form/validators/IconValidator.php b/protected/humhub/modules/ui/form/validators/IconValidator.php index 6577a60fe0..586eae1d90 100644 --- a/protected/humhub/modules/ui/form/validators/IconValidator.php +++ b/protected/humhub/modules/ui/form/validators/IconValidator.php @@ -9,6 +9,7 @@ namespace humhub\modules\ui\form\validators; use humhub\modules\ui\form\widgets\IconPicker; +use humhub\modules\ui\icon\widgets\Icon; use Yii; use yii\validators\Validator; @@ -30,7 +31,7 @@ class IconValidator extends Validator { $iconPicker = new IconPicker(['model' => $model, 'attribute' => $attribute]); - if (!in_array($model->$attribute, $iconPicker->getIcons())) { + if (!in_array($model->$attribute, Icon::$names)) { $this->addError($model, $attribute, Yii::t('UiModule.form', 'Invalid icon.')); } } diff --git a/protected/humhub/modules/ui/form/widgets/IconPicker.php b/protected/humhub/modules/ui/form/widgets/IconPicker.php index 70c65eeeff..ce453fadec 100644 --- a/protected/humhub/modules/ui/form/widgets/IconPicker.php +++ b/protected/humhub/modules/ui/form/widgets/IconPicker.php @@ -9,6 +9,7 @@ namespace humhub\modules\ui\form\widgets; +use humhub\modules\ui\icon\widgets\Icon; use kartik\select2\Select2; use Yii; use yii\web\JsExpression; @@ -27,592 +28,6 @@ use yii\web\JsExpression; */ class IconPicker extends Select2 { - /** - * @var array the list of available icons - */ - public $icons = [ - 'fa-adjust', - 'fa-adn', - 'fa-align-center', - 'fa-align-justify', - 'fa-align-left', - 'fa-align-right', - 'fa-ambulance', - 'fa-anchor', - 'fa-android', - 'fa-angellist', - 'fa-angle-double-down', - 'fa-angle-double-left', - 'fa-angle-double-right', - 'fa-angle-double-up', - 'fa-angle-down', - 'fa-angle-left', - 'fa-angle-right', - 'fa-angle-up', - 'fa-apple', - 'fa-archive', - 'fa-area-chart', - 'fa-arrow-circle-down', - 'fa-arrow-circle-left', - 'fa-arrow-circle-o-down', - 'fa-arrow-circle-o-left', - 'fa-arrow-circle-o-right', - 'fa-arrow-circle-o-up', - 'fa-arrow-circle-right', - 'fa-arrow-circle-up', - 'fa-arrow-down', - 'fa-arrow-left', - 'fa-arrow-right', - 'fa-arrow-up', - 'fa-arrows', - 'fa-arrows-alt', - 'fa-arrows-h', - 'fa-arrows-v', - 'fa-asterisk', - 'fa-at', - 'fa-backward', - 'fa-ban', - 'fa-bank-alias', - 'fa-bar-chart', - 'fa-bar-chart-o-alias', - 'fa-barcode', - 'fa-bars', - 'fa-bed', - 'fa-beer', - 'fa-behance', - 'fa-behance-square', - 'fa-bell', - 'fa-bell-o', - 'fa-bell-slash', - 'fa-bell-slash-o', - 'fa-bicycle', - 'fa-binoculars', - 'fa-birthday-cake', - 'fa-bitbucket', - 'fa-bitbucket-square', - 'fa-bitcoin-alias', - 'fa-bold', - 'fa-bolt', - 'fa-bomb', - 'fa-book', - 'fa-bookmark', - 'fa-bookmark-o', - 'fa-briefcase', - 'fa-btc', - 'fa-bug', - 'fa-building', - 'fa-building-o', - 'fa-bullhorn', - 'fa-bullseye', - 'fa-bus', - 'fa-buysellads', - 'fa-cab-alias', - 'fa-calculator', - 'fa-calendar', - 'fa-calendar-o', - 'fa-camera', - 'fa-camera-retro', - 'fa-car', - 'fa-caret-down', - 'fa-caret-left', - 'fa-caret-right', - 'fa-caret-square-o-down', - 'fa-caret-square-o-left', - 'fa-caret-square-o-right', - 'fa-caret-square-o-up', - 'fa-caret-up', - 'fa-cart-arrow-down', - 'fa-cart-plus', - 'fa-cc', - 'fa-cc-amex', - 'fa-cc-discover', - 'fa-cc-mastercard', - 'fa-cc-paypal', - 'fa-cc-stripe', - 'fa-cc-visa', - 'fa-certificate', - 'fa-chain-alias', - 'fa-chain-broken', - 'fa-check', - 'fa-check-circle', - 'fa-check-circle-o', - 'fa-check-square', - 'fa-check-square-o', - 'fa-chevron-circle-down', - 'fa-chevron-circle-left', - 'fa-chevron-circle-right', - 'fa-chevron-circle-up', - 'fa-chevron-down', - 'fa-chevron-left', - 'fa-chevron-right', - 'fa-chevron-up', - 'fa-child', - 'fa-circle', - 'fa-circle-o', - 'fa-circle-o-notch', - 'fa-circle-thin', - 'fa-clipboard', - 'fa-clock-o', - 'fa-close-alias', - 'fa-cloud', - 'fa-cloud-download', - 'fa-cloud-upload', - 'fa-cny-alias', - 'fa-code', - 'fa-code-fork', - 'fa-codepen', - 'fa-coffee', - 'fa-cog', - 'fa-cogs', - 'fa-columns', - 'fa-comment', - 'fa-comment-o', - 'fa-comments', - 'fa-comments-o', - 'fa-compass', - 'fa-compress', - 'fa-connectdevelop', - 'fa-copy-alias', - 'fa-copyright', - 'fa-credit-card', - 'fa-crop', - 'fa-crosshairs', - 'fa-css3', - 'fa-cube', - 'fa-cubes', - 'fa-cut-alias', - 'fa-cutlery', - 'fa-dashboard-alias', - 'fa-dashcube', - 'fa-database', - 'fa-dedent-alias', - 'fa-delicious', - 'fa-desktop', - 'fa-deviantart', - 'fa-diamond', - 'fa-digg', - 'fa-dollar-alias', - 'fa-dot-circle-o', - 'fa-download', - 'fa-dribbble', - 'fa-dropbox', - 'fa-drupal', - 'fa-edit-alias', - 'fa-eject', - 'fa-ellipsis-h', - 'fa-ellipsis-v', - 'fa-empire', - 'fa-envelope', - 'fa-envelope-o', - 'fa-envelope-square', - 'fa-eraser', - 'fa-eur', - 'fa-euro-alias', - 'fa-exchange', - 'fa-exclamation', - 'fa-exclamation-circle', - 'fa-exclamation-triangle', - 'fa-expand', - 'fa-external-link', - 'fa-external-link-square', - 'fa-eye', - 'fa-eye-slash', - 'fa-eyedropper', - 'fa-facebook', - 'fa-facebook-f-alias', - 'fa-facebook-official', - 'fa-facebook-square', - 'fa-fast-backward', - 'fa-fast-forward', - 'fa-fax', - 'fa-female', - 'fa-fighter-jet', - 'fa-file', - 'fa-file-archive-o', - 'fa-file-audio-o', - 'fa-file-code-o', - 'fa-file-excel-o', - 'fa-file-image-o', - 'fa-file-movie-o-alias', - 'fa-file-o', - 'fa-file-pdf-o', - 'fa-file-photo-o-alias', - 'fa-file-picture-o-alias', - 'fa-file-powerpoint-o', - 'fa-file-sound-o-alias', - 'fa-file-text', - 'fa-file-text-o', - 'fa-file-video-o', - 'fa-file-word-o', - 'fa-file-zip-o-alias', - 'fa-files-o', - 'fa-film', - 'fa-filter', - 'fa-fire', - 'fa-fire-extinguisher', - 'fa-flag', - 'fa-flag-checkered', - 'fa-flag-o', - 'fa-flash-alias', - 'fa-flask', - 'fa-flickr', - 'fa-floppy-o', - 'fa-folder', - 'fa-folder-o', - 'fa-folder-open', - 'fa-folder-open-o', - 'fa-font', - 'fa-forumbee', - 'fa-forward', - 'fa-foursquare', - 'fa-frown-o', - 'fa-futbol-o', - 'fa-gamepad', - 'fa-gavel', - 'fa-gbp', - 'fa-ge-alias', - 'fa-gear-alias', - 'fa-gears-alias', - 'fa-genderless-alias', - 'fa-gift', - 'fa-git', - 'fa-git-square', - 'fa-github', - 'fa-github-alt', - 'fa-github-square', - 'fa-gittip-alias', - 'fa-glass', - 'fa-globe', - 'fa-google', - 'fa-google-plus', - 'fa-google-plus-square', - 'fa-google-wallet', - 'fa-graduation-cap', - 'fa-gratipay', - 'fa-group-alias', - 'fa-h-square', - 'fa-hacker-news', - 'fa-hand-o-down', - 'fa-hand-o-left', - 'fa-hand-o-right', - 'fa-hand-o-up', - 'fa-hdd-o', - 'fa-header', - 'fa-headphones', - 'fa-heart', - 'fa-heart-o', - 'fa-heartbeat', - 'fa-history', - 'fa-home', - 'fa-hospital-o', - 'fa-hotel-alias', - 'fa-html5', - 'fa-ils', - 'fa-image-alias', - 'fa-inbox', - 'fa-indent', - 'fa-info', - 'fa-info-circle', - 'fa-inr', - 'fa-instagram', - 'fa-institution-alias', - 'fa-ioxhost', - 'fa-italic', - 'fa-joomla', - 'fa-jpy', - 'fa-jsfiddle', - 'fa-key', - 'fa-keyboard-o', - 'fa-krw', - 'fa-language', - 'fa-laptop', - 'fa-lastfm', - 'fa-lastfm-square', - 'fa-leaf', - 'fa-leanpub', - 'fa-legal-alias', - 'fa-lemon-o', - 'fa-level-down', - 'fa-level-up', - 'fa-life-bouy-alias', - 'fa-life-buoy-alias', - 'fa-life-ring', - 'fa-life-saver-alias', - 'fa-lightbulb-o', - 'fa-line-chart', - 'fa-link', - 'fa-linkedin', - 'fa-linkedin-square', - 'fa-linux', - 'fa-list', - 'fa-list-alt', - 'fa-list-ol', - 'fa-list-ul', - 'fa-location-arrow', - 'fa-lock', - 'fa-long-arrow-down', - 'fa-long-arrow-left', - 'fa-long-arrow-right', - 'fa-long-arrow-up', - 'fa-magic', - 'fa-magnet', - 'fa-mail-forward-alias', - 'fa-mail-reply-alias', - 'fa-mail-reply-all-alias', - 'fa-male', - 'fa-map-marker', - 'fa-mars', - 'fa-mars-double', - 'fa-mars-stroke', - 'fa-mars-stroke-h', - 'fa-mars-stroke-v', - 'fa-maxcdn', - 'fa-meanpath', - 'fa-medium', - 'fa-medkit', - 'fa-meh-o', - 'fa-mercury', - 'fa-microphone', - 'fa-microphone-slash', - 'fa-minus', - 'fa-minus-circle', - 'fa-minus-square', - 'fa-minus-square-o', - 'fa-mobile', - 'fa-mobile-phone-alias', - 'fa-money', - 'fa-moon-o', - 'fa-mortar-board-alias', - 'fa-motorcycle', - 'fa-music', - 'fa-navicon-alias', - 'fa-neuter', - 'fa-newspaper-o', - 'fa-openid', - 'fa-outdent', - 'fa-pagelines', - 'fa-paint-brush', - 'fa-paper-plane', - 'fa-paper-plane-o', - 'fa-paperclip', - 'fa-paragraph', - 'fa-paste-alias', - 'fa-pause', - 'fa-paw', - 'fa-paypal', - 'fa-pencil', - 'fa-pencil-square', - 'fa-pencil-square-o', - 'fa-phone', - 'fa-phone-square', - 'fa-photo-alias', - 'fa-picture-o', - 'fa-pie-chart', - 'fa-pied-piper', - 'fa-pied-piper-alt', - 'fa-pinterest', - 'fa-pinterest-p', - 'fa-pinterest-square', - 'fa-plane', - 'fa-play', - 'fa-play-circle', - 'fa-play-circle-o', - 'fa-plug', - 'fa-plus', - 'fa-plus-circle', - 'fa-plus-square', - 'fa-plus-square-o', - 'fa-power-off', - 'fa-print', - 'fa-puzzle-piece', - 'fa-qq', - 'fa-qrcode', - 'fa-question', - 'fa-question-circle', - 'fa-quote-left', - 'fa-quote-right', - 'fa-ra-alias', - 'fa-random', - 'fa-rebel', - 'fa-recycle', - 'fa-reddit', - 'fa-reddit-square', - 'fa-refresh', - 'fa-remove-alias', - 'fa-renren', - 'fa-reorder-alias', - 'fa-repeat', - 'fa-reply', - 'fa-reply-all', - 'fa-retweet', - 'fa-rmb-alias', - 'fa-road', - 'fa-rocket', - 'fa-rotate-left-alias', - 'fa-rotate-right-alias', - 'fa-rouble-alias', - 'fa-rss', - 'fa-rss-square', - 'fa-rub', - 'fa-ruble-alias', - 'fa-rupee-alias', - 'fa-save-alias', - 'fa-scissors', - 'fa-search', - 'fa-search-minus', - 'fa-search-plus', - 'fa-sellsy', - 'fa-send-alias', - 'fa-send-o-alias', - 'fa-server', - 'fa-share', - 'fa-share-alt', - 'fa-share-alt-square', - 'fa-share-square', - 'fa-share-square-o', - 'fa-shekel-alias', - 'fa-sheqel-alias', - 'fa-shield', - 'fa-ship', - 'fa-shirtsinbulk', - 'fa-shopping-cart', - 'fa-sign-in', - 'fa-sign-out', - 'fa-signal', - 'fa-simplybuilt', - 'fa-sitemap', - 'fa-skyatlas', - 'fa-skype', - 'fa-slack', - 'fa-sliders', - 'fa-slideshare', - 'fa-smile-o', - 'fa-soccer-ball-o-alias', - 'fa-sort', - 'fa-sort-alpha-asc', - 'fa-sort-alpha-desc', - 'fa-sort-amount-asc', - 'fa-sort-amount-desc', - 'fa-sort-asc', - 'fa-sort-desc', - 'fa-sort-down-alias', - 'fa-sort-numeric-asc', - 'fa-sort-numeric-desc', - 'fa-sort-up-alias', - 'fa-soundcloud', - 'fa-space-shuttle', - 'fa-spinner', - 'fa-spoon', - 'fa-spotify', - 'fa-square', - 'fa-square-o', - 'fa-stack-exchange', - 'fa-stack-overflow', - 'fa-star', - 'fa-star-half', - 'fa-star-half-empty-alias', - 'fa-star-half-full-alias', - 'fa-star-half-o', - 'fa-star-o', - 'fa-steam', - 'fa-steam-square', - 'fa-step-backward', - 'fa-step-forward', - 'fa-stethoscope', - 'fa-stop', - 'fa-street-view', - 'fa-strikethrough', - 'fa-stumbleupon', - 'fa-stumbleupon-circle', - 'fa-subscript', - 'fa-subway', - 'fa-suitcase', - 'fa-sun-o', - 'fa-superscript', - 'fa-support-alias', - 'fa-table', - 'fa-tablet', - 'fa-tachometer', - 'fa-tag', - 'fa-tags', - 'fa-tasks', - 'fa-taxi', - 'fa-tencent-weibo', - 'fa-terminal', - 'fa-text-height', - 'fa-text-width', - 'fa-th', - 'fa-th-large', - 'fa-th-list', - 'fa-thumb-tack', - 'fa-thumbs-down', - 'fa-thumbs-o-down', - 'fa-thumbs-o-up', - 'fa-thumbs-up', - 'fa-ticket', - 'fa-times', - 'fa-times-circle', - 'fa-times-circle-o', - 'fa-tint', - 'fa-toggle-off', - 'fa-toggle-on', - 'fa-train', - 'fa-transgender', - 'fa-transgender-alt', - 'fa-trash', - 'fa-trash-o', - 'fa-tree', - 'fa-trello', - 'fa-trophy', - 'fa-truck', - 'fa-try', - 'fa-tty', - 'fa-tumblr', - 'fa-tumblr-square', - 'fa-twitch', - 'fa-twitter', - 'fa-twitter-square', - 'fa-umbrella', - 'fa-underline', - 'fa-undo', - 'fa-university', - 'fa-unlock', - 'fa-unlock-alt', - 'fa-upload', - 'fa-usd', - 'fa-user', - 'fa-user-md', - 'fa-user-plus', - 'fa-user-secret', - 'fa-user-times', - 'fa-users', - 'fa-venus', - 'fa-venus-double', - 'fa-venus-mars', - 'fa-viacoin', - 'fa-video-camera', - 'fa-vimeo-square', - 'fa-vine', - 'fa-vk', - 'fa-volume-down', - 'fa-volume-off', - 'fa-volume-up', - 'fa-weibo', - 'fa-weixin', - 'fa-whatsapp', - 'fa-wheelchair', - 'fa-wifi', - 'fa-windows', - 'fa-wordpress', - 'fa-wrench', - 'fa-xing', - 'fa-xing-square', - 'fa-yahoo', - 'fa-yelp', - 'fa-youtube', - 'fa-youtube-play', - 'fa-youtube-square' - ]; /** * @inheritdoc @@ -627,6 +42,18 @@ class IconPicker extends Select2 parent::init(); } + /** + * @inheritdoc + */ + public function run() + { + $this->value = (strpos($this->value, 'fa-') === 0) + ? substr($this->value, 3, strlen($this->value)) + : $this->value; + + return parent::run(); + } + /** * @inheritdoc */ @@ -647,7 +74,7 @@ class IconPicker extends Select2 $title = substr($title, 3); } - $this->data[$icon] = '  ' . $title; + $this->data[$icon] = Icon::get($icon) . '  ' . $title; } } @@ -658,7 +85,7 @@ class IconPicker extends Select2 */ public function getIcons() { - return $this->icons; + return Icon::$names; } } diff --git a/protected/humhub/modules/ui/icon/FontAwesomeIconFactory.php b/protected/humhub/modules/ui/icon/FontAwesomeIconFactory.php new file mode 100644 index 0000000000..5222a28c99 --- /dev/null +++ b/protected/humhub/modules/ui/icon/FontAwesomeIconFactory.php @@ -0,0 +1,120 @@ +'fa fa-'.$icon->name, + 'style' => $icon->style + ]; + + if($icon->size) { + Html::addCssClass($options, $this->getIconSizeClass($icon)); + } + + if($icon->fixedWidth) { + Html::addCssClass($options, 'fa-fw'); + } + + if($icon->listItem) { + Html::addCssClass($options, 'fa-li'); + } + + if($icon->right) { + Html::addCssClass($options, 'fa-pull-right'); + } + + if($icon->left) { + Html::addCssClass($options, 'fa-pull-left'); + } + + if($icon->border) { + Html::addCssClass($options, 'fa-border'); + } + + if($icon->ariaHidden) { + $options['aria-hidden'] = 'true'; + } + + if($icon->color) { + Html::addCssStyle($options, ['color' => $icon->color]); + } + + return Html::beginTag('i', $options).Html::endTag('i'); + } + + /** + * @param $listDefinition [] + * @return $ + */ + public function renderList($listDefinition) + { + $items = []; + foreach ($listDefinition as $listItem) + { + $text = reset($listItem); + $iconName = key($listItem); + $options = (isset($listItem['options'])) ? $listItem['options'] : []; + $options['listItem'] = true; + $items[] = $this->render($iconName, $options).$text; + } + + return Html::ul($items, ['class' => 'fa-ul', 'encode' => false]); + } + + private function getIconSizeClass(Icon $icon) + { + switch ($icon->size) { + case Icon::SIZE_SM: + return 'fa-sm'; + case Icon::SIZE_LG: + return 'fa-lg'; + case Icon::SIZE_2x: + return 'fa-2x'; + case Icon::SIZE_3x: + return 'fa-3x'; + case Icon::SIZE_4x: + return 'fa-4x'; + case Icon::SIZE_5x: + return 'fa-5x'; + case Icon::SIZE_6x: + return 'fa-6x'; + case Icon::SIZE_7x: + return 'fa-7x'; + case Icon::SIZE_8x: + return 'fa-8x'; + case Icon::SIZE_9x: + return 'fa-9x'; + case Icon::SIZE_10x: + return 'fa-10x'; + default: + return null; + } + } +} \ No newline at end of file diff --git a/protected/humhub/modules/ui/icon/IconFactory.php b/protected/humhub/modules/ui/icon/IconFactory.php new file mode 100644 index 0000000000..8ae4a68977 --- /dev/null +++ b/protected/humhub/modules/ui/icon/IconFactory.php @@ -0,0 +1,50 @@ + true]); + * + * IconFactory::render(['name' => 'task', 'fixedWith' => true]); + * + * IconFactory::render(new Icon(['name' => 'task', 'fixedWith' => true])); + * ``` + * @param $icon string|Icon|[] either an icon name, icon instance or icon array definition + * @return mixed + */ + public function render($icon, $options = []); + + /** + * Renders a icon list: + * + * 'My List Item 1', 'options' => []], + * ['tachometer' => 'My List Item 2', 'options' => []] + * ]); ?> + * + * @param $listDefinition + * @return $ + */ + public function renderList($listDefinition); + +} \ No newline at end of file diff --git a/protected/humhub/modules/ui/icon/widgets/Icon.php b/protected/humhub/modules/ui/icon/widgets/Icon.php new file mode 100644 index 0000000000..dc4e37f242 --- /dev/null +++ b/protected/humhub/modules/ui/icon/widgets/Icon.php @@ -0,0 +1,779 @@ +params['iconFactory'])) + ? Yii::createObject(Yii::$app->params['iconFactory']) + : new FontAwesomeIconFactory(); + } + + return static::$iconFactory; + } + + public static function get($icon, $options = []) + { + if($icon instanceof static) { + return Yii::configure($icon, $options); + } else if(is_string($icon)) { + $options['name'] = $icon; + return new Icon($options); + } else if(is_array($icon)) { + return new Icon($icon); + } + } + + /** + * @return mixed|string + * @throws \yii\base\InvalidConfigException + */ + public function run() + { + /** + * Catch for legacy icon usage + */ + $this->name = (strpos($this->name, 'fa-') === 0) + ? substr($this->name, 3, strlen($this->name)) + : $this->name; + + if($this->color) { + switch($this->color) { + case 'default': + $this->color = $this->view->theme->variable('default'); + break; + case 'primary': + $this->color = $this->view->theme->variable('primary'); + break; + case 'info': + $this->color = $this->view->theme->variable('info'); + break; + case 'success': + $this->color = $this->view->theme->variable('success'); + break; + case 'warning': + case 'warn': + $this->color = $this->view->theme->variable('warn'); + break; + + case 'error': + case 'danger': + $this->color = $this->view->theme->variable('danger'); + break; + + } + } + + return static::getFactory()->render($this); + } + + /** + * @param $listDefinition + * @return mixed + * @throws \yii\base\InvalidConfigException + */ + public static function renderList($listDefinition) + { + return static::getFactory()->renderList($listDefinition); + } + + /** + * @return string + * @throws \Exception + */ + public function __toString() + { + $result = $this::widget($this->getWidgetOptions()); + + return $result ? $result : ''; + } + + /** + * @return array all options required for rendering the widget + */ + public function getWidgetOptions() + { + return [ + 'id' => $this->id, + 'name' => $this->name, + 'size' => $this->size, + 'fixedWidth' => $this->fixedWidth, + 'listItem' => $this->listItem, + 'right' => $this->right, + 'left' => $this->left, + 'ariaHidden' => $this->ariaHidden, + 'border' => $this->border, + 'style' => $this->style, + 'color' => $this->color, + ]; + } + +} \ No newline at end of file diff --git a/protected/humhub/modules/ui/menu/MenuEntry.php b/protected/humhub/modules/ui/menu/MenuEntry.php index c7ba40a29b..80e61bbbf6 100644 --- a/protected/humhub/modules/ui/menu/MenuEntry.php +++ b/protected/humhub/modules/ui/menu/MenuEntry.php @@ -8,7 +8,7 @@ namespace humhub\modules\ui\menu; -use humhub\modules\ui\widgets\Icon; +use humhub\modules\ui\icon\widgets\Icon; use yii\base\BaseObject; use yii\bootstrap\Html; use yii\helpers\Url; @@ -114,11 +114,11 @@ class MenuEntry extends BaseObject } /** - * @param $icon Icon the icon + * @param $icon Icon|string the icon instance or icon name */ public function setIcon($icon) { - $this->icon = $icon; + $this->icon = Icon::get($icon); } /** diff --git a/protected/humhub/modules/ui/widgets/Icon.php b/protected/humhub/modules/ui/widgets/Icon.php deleted file mode 100644 index 8b4618cff3..0000000000 --- a/protected/humhub/modules/ui/widgets/Icon.php +++ /dev/null @@ -1,55 +0,0 @@ -name . '">'; - } - - - /** - * @inheritdoc - */ - public function run() - { - return $this->renderHtml(); - } - - /** - * @return string returns the Html tag for this icon - */ - public function __toString() - { - return $this->renderHtml(); - } - -} diff --git a/static/less/humhub.less b/static/less/humhub.less index fe4e8f0e28..0058b48814 100644 --- a/static/less/humhub.less +++ b/static/less/humhub.less @@ -184,6 +184,11 @@ @import "richtext.less"; } +@prev-icon: false; +& when not(@prev-icon) { + @import "icon.less"; +} + @import "../css/select2Theme/build.less"; // LEGACY/DEPRECATED User- & Space picker diff --git a/static/less/icon.less b/static/less/icon.less new file mode 100644 index 0000000000..488553bdc3 --- /dev/null +++ b/static/less/icon.less @@ -0,0 +1,41 @@ +.icon-sm, .fa-sm { + font-size: .875em; +} + +.icon-lg, .fa-lg { + font-size: 1.33333em; + line-height: .75em; + vertical-align: -.0667em; +} + +.icon-2x, .fa-2x { + font-size: 2em; +} + +.icon-3x, .fa-3x { + font-size: 3em; +} + +.icon-4x, .fa-4x { + font-size: 4em; +} + +.icon-5x, .fa-5x { + font-size: 5em; +} + +.icon-6x, .fa-6x { + font-size: 6em; +} + +.icon-7x, .fa-7x { + font-size: 7em; +} + +.icon-9x, .fa-9x { + font-size: 9em; +} + +.icon-10x, .fa-10x { + font-size: 10em; +} diff --git a/themes/HumHub/css/theme.css b/themes/HumHub/css/theme.css index 2c98392ee3..877d4e3e28 100644 --- a/themes/HumHub/css/theme.css +++ b/themes/HumHub/css/theme.css @@ -1 +1 @@ -.colorDefault{color:#ededed}.backgroundDefault{background:#ededed}.borderDefault{border-color:#ededed}.colorPrimary{color:#708fa0 !important}.backgroundPrimary{background:#708fa0 !important}.borderPrimary{border-color:#708fa0 !important}.colorInfo{color:#6fdbe8 !important}.backgroundInfo{background:#6fdbe8 !important}.borderInfo{border-color:#6fdbe8 !important}.colorSuccess{color:#97d271 !important}.backgroundSuccess{background:#97d271 !important}.borderSuccess{border-color:#97d271 !important}.colorWarning{color:#fdd198 !important}.backgroundWarning{background:#fdd198 !important}.borderWarning{border-color:#fdd198 !important}.colorDanger{color:#ff8989 !important}.backgroundDanger{background:#ff8989 !important}.borderDanger{border-color:#ff8989 !important}.colorFont1{color:#bac2c7 !important}.colorFont2{color:#7a7a7a !important}.colorFont3{color:#555 !important}.colorFont4{color:#bebebe !important}.colorFont5{color:#aeaeae !important}.heading{font-size:16px;font-weight:300;color:#555;background-color:white;border:none;padding:10px}.text-center{text-align:center !important}.text-break{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.img-rounded{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body{padding-top:130px;background-color:#ededed;color:#777;font-family:'Open Sans',sans-serif}body a,body a:hover,body a:focus,body a:active,body a.active{color:#555;text-decoration:none}@media (max-width:920px){body{padding-top:115px}}@media (min-width:768px) and (max-width:920px){body{padding-top:120px}}a:hover{text-decoration:none}hr{margin-top:10px;margin-bottom:10px}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{position:inherit}.layout-content-container,.layout-nav-container{padding:0 10px 0 15px}.layout-sidebar-container{padding:0 15px 0 5px}@media (max-width:768px){.layout-nav-container .left-navigation{margin-bottom:0}.layout-nav-container,.layout-content-container{padding:0 15px}}@media (min-width:768px) and (max-width:920px){#topbar-first .container,#topbar-second .container{padding-left:10px;padding-right:20px}}h4{font-weight:300;font-size:150%}input[type=text],input[type=password],input[type=select]{-webkit-appearance:none;-moz-appearance:none;appearance:none}.powered,.powered a{color:#b8c7d3 !important}.langSwitcher{display:inline-block}[data-ui-show-more]{overflow:hidden}.topbar{position:fixed;display:block;height:50px;width:100%;padding-left:15px;padding-right:15px}.topbar ul.nav{float:left}.topbar ul.nav>li{float:left}.topbar ul.nav>li>a{padding-top:15px;padding-bottom:15px;line-height:20px}.topbar .dropdown-footer{margin:10px}.topbar .dropdown-header{font-size:16px;padding:3px 10px;margin-bottom:10px;font-weight:300;color:#bebebe}.topbar .dropdown-header .dropdown-header-link{position:absolute;top:2px;right:10px}.topbar .dropdown-header .dropdown-header-link a{color:#6fdbe8 !important;font-size:12px;font-weight:normal}.topbar .dropdown-header:hover{color:#bebebe}#topbar-first{background-color:#708fa0;top:0;z-index:1030;color:white}#topbar-first .nav>li>a:hover,#topbar-first .nav>.open>a{background-color:#8fa7b4}#topbar-first .nav>.account{height:50px;margin-left:20px}#topbar-first .nav>.account img{margin-left:10px}#topbar-first .nav>.account .dropdown-toggle{padding:10px 5px 8px;line-height:1.1em;text-align:left}#topbar-first .nav>.account .dropdown-toggle span{font-size:12px}#topbar-first .topbar-brand{position:relative;z-index:2}#topbar-first .topbar-actions{position:relative;z-index:3}#topbar-first .notifications{position:absolute;left:0;right:0;text-align:center;z-index:1}#topbar-first .notifications .btn-group{position:relative;text-align:left}#topbar-first .notifications .btn-group>a{padding:5px 10px;margin:10px 2px;display:inline-block;border-radius:2px;text-decoration:none;text-align:left}#topbar-first .notifications .btn-group>.label{position:absolute;top:4px;right:-2px}#topbar-first .notifications .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;border-width:10px;content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff;z-index:1035}#topbar-first .notifications .arrow{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;z-index:1001;border-width:11px;left:50%;margin-left:-18px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.15);top:-19px;z-index:1035}#topbar-first .notifications .dropdown-menu{width:350px;margin-left:-148px}#topbar-first .notifications .dropdown-menu ul.media-list{max-height:400px;overflow:auto}#topbar-first .notifications .dropdown-menu li{position:relative}#topbar-first .notifications .dropdown-menu li i.approval{position:absolute;left:2px;top:36px;font-size:14px}#topbar-first .notifications .dropdown-menu li i.accepted{color:#5cb85c}#topbar-first .notifications .dropdown-menu li i.declined{color:#d9534f}#topbar-first .notifications .dropdown-menu li .media{position:relative}#topbar-first .notifications .dropdown-menu li .media .img-space{position:absolute;top:14px;left:14px}#topbar-first .dropdown-footer{margin:10px 10px 5px}#topbar-first a{color:white}#topbar-first .caret{border-top-color:#bebebe}#topbar-first .btn-group>a{background-color:#7f9baa}#topbar-first .btn-enter{background-color:#7f9baa;margin:6px 0}#topbar-first .btn-enter:hover{background-color:#89a2b0}#topbar-first .media-list a{color:#555;padding:0}#topbar-first .media-list li{color:#555}#topbar-first .media-list li i.accepted{color:#6fdbe8 !important}#topbar-first .media-list li i.declined{color:#ff8989 !important}#topbar-first .media-list li.placeholder{border-bottom:none}#topbar-first .media-list .media .media-body .label{padding:.1em .5em}#topbar-first .account .user-title{text-align:right}#topbar-first .account .user-title span{color:#d7d7d7}#topbar-first .dropdown.account>a,#topbar-first .dropdown.account.open>a,#topbar-first .dropdown.account>a:hover,#topbar-first .dropdown.account.open>a:hover{background-color:#708fa0}#topbar-second{top:50px;background-color:#fff;z-index:1029;background-image:none;-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1);border-bottom:1px solid #d4d4d4}#topbar-second .dropdown-menu{padding-top:0;padding-bottom:0}#topbar-second .dropdown-menu .divider{margin:0}#topbar-second #space-menu-dropdown,#topbar-second #search-menu-dropdown{width:400px}#topbar-second #space-menu-dropdown .media-list,#topbar-second #search-menu-dropdown .media-list{max-height:400px;overflow:auto}@media screen and (max-width:768px){#topbar-second #space-menu-dropdown .media-list,#topbar-second #search-menu-dropdown .media-list{max-height:200px}}#topbar-second #space-menu-dropdown form,#topbar-second #search-menu-dropdown form{margin:10px}#topbar-second #space-menu-dropdown .search-reset,#topbar-second #search-menu-dropdown .search-reset{position:absolute;color:#BFBFBF;margin:7px;top:0;right:40px;z-index:10;display:none;cursor:pointer}#topbar-second .nav>li>a{padding:7px 13px 0;text-decoration:none;text-shadow:none;font-weight:600;font-size:10px;min-height:50px;text-transform:uppercase;text-align:center}#topbar-second .nav>li>a:hover,#topbar-second .nav>li>a:active,#topbar-second .nav>li>a:focus{border-bottom:3px solid #6fdbe8;background-color:#f7f7f7;color:#555;text-decoration:none}#topbar-second .nav>li>a i{font-size:14px}#topbar-second .nav>li>a .caret{border-top-color:#7a7a7a}#topbar-second .nav>li.active>a{min-height:47px}#topbar-second .nav>li>ul>li>a{border-left:3px solid #fff;background-color:#fff;color:#555}#topbar-second .nav>li>ul>li>a:hover,#topbar-second .nav>li>ul>li>a.active{border-left:3px solid #6fdbe8;background-color:#f7f7f7;color:#555}#topbar-second .nav>li>a#space-menu{padding-right:13px;border-right:1px solid #ededed}#topbar-second .nav>li>a#search-menu{padding-top:15px}#topbar-second .nav>li>a:hover,#topbar-second .nav .open>a,#topbar-second .nav>li.active{border-bottom:3px solid #6fdbe8;background-color:#f7f7f7;color:#555}#topbar-second .nav>li.active>a:hover{border-bottom:none}#topbar-second #space-menu-dropdown li>ul>li>a>.media .media-body p{color:#bebebe;font-size:11px;margin:0;font-weight:400}@media (max-width:767px){.topbar{padding-left:0;padding-right:0}}.login-container{background-color:#708fa0;background-image:linear-gradient(to right, #708fa0 0, #8fa7b4 50%, #8fa7b4 100%),linear-gradient(to right, #7f9baa 0, #bdcbd3 51%, #adbfc9 100%);background-size:100% 100%;position:relative;padding-top:40px}.login-container .text{color:#fff;font-size:12px;margin-bottom:15px}.login-container .text a{color:#fff;text-decoration:underline}.login-container .panel a{color:#6fdbe8}.login-container h1,.login-container h2{color:#fff !important}.login-container .panel{box-shadow:0 0 15px #627d92;-moz-box-shadow:0 0 15px #627d92;-webkit-box-shadow:0 0 15px #627d92}.login-container .panel .panel-heading,.login-container .panel .panel-body{padding:15px}.login-container select{color:#555}#account-login-form .form-group{margin-bottom:10px}.dropdown-menu li a{font-size:13px !important;font-weight:600 !important}.dropdown-menu li a i{margin-right:5px;font-size:14px;display:inline-block;width:14px}.dropdown-menu li a:hover,.dropdown-menu li a:visited,.dropdown-menu li a:hover,.dropdown-menu li a:focus{background:none;cursor:pointer}.dropdown-menu li:hover,.dropdown-menu li.selected{color:#555}.dropdown-menu li:first-child{margin-top:3px}.dropdown-menu li:last-child{margin-bottom:3px}.modal .dropdown-menu,.panel .dropdown-menu,.nav-tabs .dropdown-menu{border:1px solid #d7d7d7}.modal .dropdown-menu li.divider,.panel .dropdown-menu li.divider,.nav-tabs .dropdown-menu li.divider{background-color:#f7f7f7;border-bottom:none;margin:9px 1px !important}.modal .dropdown-menu li,.panel .dropdown-menu li,.nav-tabs .dropdown-menu li{border-left:3px solid white}.modal .dropdown-menu li a,.panel .dropdown-menu li a,.nav-tabs .dropdown-menu li a{color:#555;font-size:14px;font-weight:400;padding:4px 15px}.modal .dropdown-menu li a i,.panel .dropdown-menu li a i,.nav-tabs .dropdown-menu li a i{margin-right:5px}.modal .dropdown-menu li a:hover,.panel .dropdown-menu li a:hover,.nav-tabs .dropdown-menu li a:hover{background:none}.modal .dropdown-menu li:hover,.panel .dropdown-menu li:hover,.nav-tabs .dropdown-menu li:hover,.modal .dropdown-menu li.selected,.panel .dropdown-menu li.selected,.nav-tabs .dropdown-menu li.selected{border-left:3px solid #6fdbe8;background-color:#f7f7f7 !important}ul.contextMenu{border:1px solid #d7d7d7}ul.contextMenu li.divider{background-color:#f7f7f7;border-bottom:none;margin:9px 1px !important}ul.contextMenu li{border-left:3px solid white}ul.contextMenu li a{color:#555;font-size:14px;font-weight:400;padding:4px 15px}ul.contextMenu li a i{margin-right:5px}ul.contextMenu li a:hover{background:none}ul.contextMenu li:hover,ul.contextMenu li.selected{border-left:3px solid #6fdbe8;background-color:#f7f7f7 !important}.media-list li{padding:10px;border-bottom:1px solid #eee;position:relative;border-left:3px solid white;font-size:12px}.media-list li a{color:#555}.media-list .badge-space-type{background-color:#f7f7f7;border:1px solid #d7d7d7;color:#b2b2b2;padding:3px 3px 2px 3px}.media-list li.new{border-left:3px solid #f3fcfd;background-color:#f3fcfd}.media-list li:hover,.media-list li.selected{background-color:#f7f7f7;border-left:3px solid #6fdbe8}.media-list li.placeholder{font-size:14px !important;border-bottom:none}.media-list li.placeholder:hover{background:none !important;border-left:3px solid white}.media-left,.media>.pull-left{padding-right:0;margin-right:10px}.media:after{content:'';clear:both;display:block}.media .time{font-size:11px;color:#bebebe}.media .img-space{position:absolute;top:35px;left:35px}.media .media-body{font-size:13px}.media .media-body h4.media-heading{font-size:14px;font-weight:500;color:#555}.media .media-body h4.media-heading a{color:#555}.media .media-body h4.media-heading small,.media .media-body h4.media-heading small a{font-size:11px;color:#bebebe}.media .media-body h4.media-heading .content{margin-right:35px}.media .media-body .content a{word-break:break-all}.media .media-body h5{color:#aeaeae;font-weight:300;margin-top:5px;margin-bottom:5px;min-height:15px}.media .media-body .module-controls{font-size:85%}.media .media-body .module-controls a{color:#6fdbe8}.media .content a{color:#6fdbe8}.media .content .files a{color:#555}.content span{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.panel{border:none;background-color:#fff;box-shadow:0 0 3px #dadada;-webkit-box-shadow:0 0 3px #dadada;-moz-box-shadow:0 0 3px #dadada;border-radius:4px;position:relative;margin-bottom:15px}.panel h1{font-size:16px;font-weight:300;margin-top:0;color:#555}.panel .panel-heading{font-size:16px;font-weight:300;color:#555;background-color:white;border:none;padding:10px;border-radius:4px}.panel .panel-heading .heading-link{color:#6fdbe8 !important;font-size:.8em}.panel .panel-body{padding:10px;font-size:13px}.panel .panel-body p{color:#555}.panel .statistics .entry{margin-left:20px;font-size:12px}.panel .statistics .entry .count{color:#6fdbe8;font-weight:600;font-size:20px;line-height:.8em}.panel h3.media-heading small{font-size:75%}.panel h3.media-heading small a{color:#6fdbe8}.panel-danger{border:2px solid #ff8989}.panel-danger .panel-heading{color:#ff8989}.panel-success{border:2px solid #97d271}.panel-success .panel-heading{color:#97d271}.panel-warning{border:2px solid #fdd198}.panel-warning .panel-heading{color:#fdd198}.panel.profile{position:relative}.panel.profile .controls{position:absolute;top:10px;right:10px}.panel.members .panel-body a img,.panel.groups .panel-body a img,.panel.follower .panel-body a img,.panel.spaces .panel-body a img{margin-bottom:5px}.panel-profile .panel-profile-header{position:relative;border:3px solid #fff;border-top-right-radius:3px;border-top-left-radius:3px}.panel-profile .panel-profile-header .img-profile-header-background{border-radius:3px;min-height:110px}.panel-profile .panel-profile-header .img-profile-data{position:absolute;height:100px;width:100%;bottom:0;left:0;padding-left:180px;padding-top:30px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;color:#fff;pointer-events:none;background:-moz-linear-gradient(top, rgba(0,0,0,0) 0, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0, rgba(0,0,0,0)), color-stop(1%, rgba(0,0,0,0)), color-stop(100%, rgba(0,0,0,0.38)));background:-webkit-linear-gradient(top, rgba(0,0,0,0) 0, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);background:-o-linear-gradient(top, rgba(0,0,0,0) 0, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);background:-ms-linear-gradient(top, rgba(0,0,0,0) 0, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);background:linear-gradient(to bottom, rgba(0,0,0,0) 0, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#94000000', GradientType=0)}.panel-profile .panel-profile-header .img-profile-data h1{font-size:30px;font-weight:100;margin-bottom:7px;color:#fff;max-width:600px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.panel-profile .panel-profile-header .img-profile-data h2{font-size:16px;font-weight:400;margin-top:0}.panel-profile .panel-profile-header .img-profile-data h1.space{font-size:30px;font-weight:700}.panel-profile .panel-profile-header .img-profile-data h2.space{font-size:13px;font-weight:300;max-width:600px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.panel-profile .panel-profile-header .profile-user-photo-container{position:absolute;bottom:-50px;left:15px}.panel-profile .panel-profile-header .profile-user-photo-container .profile-user-photo{border:3px solid #fff;border-radius:5px}.panel-profile .panel-profile-controls{padding-left:160px}.panel.pulse,.panel.fadeIn{-webkit-animation-duration:200ms;-moz-animation-duration:200ms;animation-duration:200ms}@media (max-width:767px){.panel-profile-controls{padding-left:0 !important;padding-top:50px}.panel-profile .panel-profile-header .img-profile-data h1{font-size:20px !important}}.panel-body>.tab-menu{margin-left:-10px;margin-right:-10px}.installer .logo{text-align:center}.installer h2{font-weight:100}.installer .panel{margin-top:50px}.installer .panel h3{margin-top:0}.installer .powered,.installer .powered a{color:#bac2c7 !important;margin-top:10px;font-size:12px}.installer .fa{width:18px}.installer .check-ok{color:#97d271}.installer .check-warning{color:#fdd198}.installer .check-error{color:#ff8989}.installer .prerequisites-list ul{list-style:none;padding-left:15px}.installer .prerequisites-list ul li{padding-bottom:5px}.pagination-container{text-align:center}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{background-color:#708fa0;border-color:#708fa0}.pagination>li>a,.pagination>li>span,.pagination>li>a:hover,.pagination>li>a:active,.pagination>li>a:focus{color:#555;cursor:pointer}.well-small{padding:10px;border-radius:3px}.well{border:none;box-shadow:none;background-color:#ededed;margin-bottom:1px}.well hr{margin:15px 0 10px;border-top:1px solid #d9d9d9}.well table>thead{font-size:11px}.tab-sub-menu{padding-left:10px}.tab-sub-menu li>a:hover,.tab-sub-menu li>a:focus{background-color:#f7f7f7;border-bottom-color:#ddd}.tab-sub-menu li.active>a{background-color:#fff;border-bottom-color:transparent}.tab-menu{padding-top:10px;background-color:#fff}.tab-menu .nav-tabs{padding-left:10px}.tab-menu .nav-tabs li>a{padding-top:12px;border-color:#ddd;border-bottom:1px solid #ddd;background-color:#f7f7f7;max-height:41px;outline:none}.tab-menu .nav-tabs li>a:hover,.tab-menu .nav-tabs li>a:focus{padding-top:10px;border-top:3px solid #ddd}.tab-menu .nav-tabs li>a:hover{background-color:#f7f7f7}.tab-menu .nav-tabs li.active>a,.tab-menu .nav-tabs li.active>a:hover{padding-top:10px;border-top:3px solid #6fdbe8}.tab-menu .nav-tabs li.active>a{background-color:#fff;border-bottom-color:transparent}ul.tab-menu{padding-top:10px;background-color:#fff;padding-left:10px}ul.tab-menu-settings li>a{padding-top:12px;border-color:#ddd;border-bottom:1px solid #ddd;background-color:#f7f7f7;max-height:41px;outline:none}ul.tab-menu-settings li>a:hover,ul.tab-menu-settings li>a:focus{padding-top:10px;border-top:3px solid #ddd !important}ul.tab-menu-settings li>a:hover{background-color:#f7f7f7}ul.tab-menu-settings li.active>a,ul.tab-menu-settings li.active>a:hover,ul.tab-menu-settings li.active>a:focus{padding-top:10px;border-top:3px solid #6fdbe8 !important}ul.tab-menu-settings li.active>a{background-color:#fff;border-bottom-color:transparent !important}.nav-pills .dropdown-menu,.nav-tabs .dropdown-menu,.account .dropdown-menu{background-color:#708fa0;border:none}.nav-pills .dropdown-menu li.divider,.nav-tabs .dropdown-menu li.divider,.account .dropdown-menu li.divider{background-color:#628394;border-bottom:none;margin:9px 1px !important}.nav-pills .dropdown-menu li,.nav-tabs .dropdown-menu li,.account .dropdown-menu li{border-left:3px solid #708fa0}.nav-pills .dropdown-menu li a,.nav-tabs .dropdown-menu li a,.account .dropdown-menu li a{color:white;font-weight:400;font-size:13px;padding:4px 15px}.nav-pills .dropdown-menu li a i,.nav-tabs .dropdown-menu li a i,.account .dropdown-menu li a i{margin-right:5px;font-size:14px;display:inline-block;width:14px}.nav-pills .dropdown-menu li a:hover,.nav-tabs .dropdown-menu li a:hover,.account .dropdown-menu li a:hover,.nav-pills .dropdown-menu li a:visited,.nav-tabs .dropdown-menu li a:visited,.account .dropdown-menu li a:visited,.nav-pills .dropdown-menu li a:hover,.nav-tabs .dropdown-menu li a:hover,.account .dropdown-menu li a:hover,.nav-pills .dropdown-menu li a:focus,.nav-tabs .dropdown-menu li a:focus,.account .dropdown-menu li a:focus{background:none}.nav-pills .dropdown-menu li:hover,.nav-tabs .dropdown-menu li:hover,.account .dropdown-menu li:hover,.nav-pills .dropdown-menu li.selected,.nav-tabs .dropdown-menu li.selected,.account .dropdown-menu li.selected{border-left:3px solid #6fdbe8;color:#fff !important;background-color:#628394 !important}.nav-pills.preferences .dropdown .dropdown-toggle{color:#bebebe}.nav-pills.preferences .dropdown.open .dropdown-toggle,.nav-pills.preferences .dropdown.open .dropdown-toggle:hover{background-color:#708fa0}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{background-color:#708fa0}.nav-tabs{margin-bottom:10px}.list-group a [class^="fa-"],.list-group a [class*=" fa-"]{display:inline-block;width:18px}.nav-pills.preferences{position:absolute;right:10px;top:10px}.nav-pills.preferences .dropdown .dropdown-toggle{padding:2px 10px}.nav-pills.preferences .dropdown.open .dropdown-toggle,.nav-pills.preferences .dropdown.open .dropdown-toggle:hover{color:white}.nav-tabs li{font-weight:600;font-size:12px}.tab-content .tab-pane a{color:#6fdbe8}.tab-content .tab-pane .form-group{margin-bottom:5px}.nav-tabs.tabs-center li{float:none;display:inline-block}.nav-tabs.tabs-small li>a{padding:5px 7px}.nav .caret,.nav .caret:hover,.nav .caret:active{border-top-color:#555;border-bottom-color:#555;height:6.928px}.nav li.dropdown>a:hover .caret,.nav li.dropdown>a:active .caret{border-top-color:#555;border-bottom-color:#555}.nav .open>a .caret,.nav .open>a:hover .caret,.nav .open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{border-color:#ededed;color:#555}.nav .open>a .caret,.nav .open>a:hover .caret,.nav .open>a:focus .caret{color:#555}.footer-nav{filter:opacity(.6);font-size:12px;text-align:center}@media (max-width:991px){.controls-header{text-align:left !important}}.btn{float:none;border:none;-webkit-box-shadow:none;box-shadow:none;-moz-box-shadow:none;background-image:none;text-shadow:none;border-radius:3px;outline:none !important;margin-bottom:0;font-size:14px;font-weight:600;padding:8px 16px}.input.btn{outline:none}.btn-lg{padding:16px 28px}.btn-sm{padding:4px 8px;font-size:12px}.btn-sm i{font-size:14px}.btn-xs{padding:1px 5px;font-size:12px}.btn-default{background:#ededed;color:#7a7a7a !important}.btn-default:hover,.btn-default:focus{background:#e8e8e8;text-decoration:none;color:#7a7a7a}.btn-default:active,.btn-default.active{outline:0;background:#e0e0e0}.btn-default[disabled],.btn-default.disabled{background:#f2f2f2}.btn-default[disabled]:hover,.btn-default.disabled:hover,.btn-default[disabled]:focus,.btn-default.disabled:focus{background:#f2f2f2}.btn-default[disabled]:active,.btn-default.disabled:active,.btn-default[disabled].active,.btn-default.disabled.active{background:#f2f2f2}.btn-primary{background:#708fa0;color:#fff !important}.btn-primary:hover,.btn-primary:focus{background:#628394;text-decoration:none}.btn-primary:active,.btn-primary.active{outline:0;background:#628394 !important}.btn-primary[disabled],.btn-primary.disabled{background:#7f9baa}.btn-primary[disabled]:hover,.btn-primary.disabled:hover,.btn-primary[disabled]:focus,.btn-primary.disabled:focus{background:#7f9baa}.btn-primary[disabled]:active,.btn-primary.disabled:active,.btn-primary[disabled].active,.btn-primary.disabled.active{background:#7f9baa !important}.btn-info{background:#6fdbe8;color:#fff !important}.btn-info:hover,.btn-info:focus{background:#59d6e4 !important;text-decoration:none}.btn-info:active,.btn-info.active{outline:0;background:#59d6e4}.btn-info[disabled],.btn-info.disabled{background:#85e0ec}.btn-info[disabled]:hover,.btn-info.disabled:hover,.btn-info[disabled]:focus,.btn-info.disabled:focus{background:#85e0ec}.btn-info[disabled]:active,.btn-info.disabled:active,.btn-info[disabled].active,.btn-info.disabled.active{background:#85e0ec !important}.btn-danger{background:#ff8989;color:#fff !important}.btn-danger:hover,.btn-danger:focus{background:#ff6f6f;text-decoration:none}.btn-danger:active,.btn-danger.active{outline:0;background:#ff6f6f !important}.btn-danger[disabled],.btn-danger.disabled{background:#ffa3a3}.btn-danger[disabled]:hover,.btn-danger.disabled:hover,.btn-danger[disabled]:focus,.btn-danger.disabled:focus{background:#ffa3a3}.btn-danger[disabled]:active,.btn-danger.disabled:active,.btn-danger[disabled].active,.btn-danger.disabled.active{background:#ffa3a3 !important}.btn-success{background:#97d271;color:#fff !important}.btn-success:hover,.btn-success:focus{background:#89cc5e;text-decoration:none}.btn-success:active,.btn-success.active{outline:0;background:#89cc5e !important}.btn-success[disabled],.btn-success.disabled{background:#a5d884}.btn-success[disabled]:hover,.btn-success.disabled:hover,.btn-success[disabled]:focus,.btn-success.disabled:focus{background:#a5d884}.btn-success[disabled]:active,.btn-success.disabled:active,.btn-success[disabled].active,.btn-success.disabled.active{background:#a5d884 !important}.btn-warning{background:#fdd198;color:#fff !important}.btn-warning:hover,.btn-warning:focus{background:#fdcd8e;text-decoration:none}.btn-warning:active,.btn-warning.active{outline:0;background:#fdcd8e !important}.btn-warning[disabled],.btn-warning.disabled{background:#fddcb1}.btn-warning[disabled]:hover,.btn-warning.disabled:hover,.btn-warning[disabled]:focus,.btn-warning.disabled:focus{background:#fddcb1}.btn-warning[disabled]:active,.btn-warning.disabled:active,.btn-warning[disabled].active,.btn-warning.disabled.active{background:#fddcb1 !important}.radio,.checkbox{margin-top:5px !important;margin-bottom:0}.radio label,.checkbox label{padding-left:10px}.form-control{border:2px solid #ededed;box-shadow:none;min-height:35px}.form-control:focus{border:2px solid #6fdbe8;outline:0;box-shadow:none}.form-control.form-search{border-radius:30px;background-image:url("../img/icon_search16x16.png");background-repeat:no-repeat;background-position:10px 8px;padding-left:34px}.form-group-search{position:relative}.form-group-search .form-button-search{position:absolute;top:4px;right:4px;border-radius:30px}textarea{resize:none;height:1.5em}select.form-control:not([multiple]){-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("../img/select_arrow.png") !important;background-repeat:no-repeat;background-position:right 13px;overflow:hidden}label{font-weight:normal}label.control-label{font-weight:bold}::-webkit-input-placeholder{color:#bebebe !important}::-moz-placeholder{color:#bebebe !important}:-ms-input-placeholder{color:#bebebe !important}input:-moz-placeholder{color:#bebebe !important}.placeholder{padding:10px}input.placeholder,textarea.placeholder{padding:0 0 0 10px;color:#999}.help-block-error{font-size:12px}.hint-block,.help-block:not(.help-block-error){color:#aeaeae !important;font-size:12px}.hint-block:hover,.help-block:not(.help-block-error):hover{color:#7a7a7a !important;font-size:12px}.input-group-addon{border:none}a.input-field-addon{font-size:12px;float:right;margin-top:-10px}a.input-field-addon-sm{font-size:11px;float:right;margin-top:-10px}.timeZoneInputContainer{padding-top:10px}.timeZoneInputContainer~.help-block{margin:0}.label{text-transform:uppercase}.label{text-transform:uppercase;display:inline-block;padding:3px 5px 4px;font-weight:600;font-size:10px !important;color:white !important;vertical-align:baseline;white-space:nowrap;text-shadow:none}.label-default{background:#ededed;color:#7a7a7a !important}a.label-default:hover{background:#e0e0e0 !important}.label-info{background-color:#6fdbe8}a.label-info:hover{background:#59d6e4 !important}.label-danger{background-color:#ff8989}a.label-danger:hover{background:#ff6f6f !important}.label-success{background-color:#97d271}a.label-success:hover{background:#89cc5e !important}.label-warning{background-color:#fdd198}a.label-warning:hover{background:#fdc67f !important}.regular-checkbox:checked+.regular-checkbox-box{border:2px solid #6fdbe8;background:#6fdbe8;color:white}.regular-checkbox-box.disabled{background:#d7d7d7 !important;border:2px solid #d7d7d7 !important;cursor:not-allowed}.regular-radio:checked+.regular-radio-button:after{background:#6fdbe8}.regular-radio:checked+.regular-radio-button{background-color:none;color:#99a1a7;border:2px solid #d7d7d7;margin-right:5px}.regular-radio.disabled{background:#d7d7d7 !important;border:2px solid #d7d7d7 !important;cursor:not-allowed}.errorMessage{color:#ff8989;padding:10px 0}.error{border-color:#ff8989 !important}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#ff8989 !important}.has-error .form-control,.has-error .form-control:focus{border-color:#ff8989;-webkit-box-shadow:none;box-shadow:none}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#97d271}.has-success .form-control,.has-success .form-control:focus{border-color:#97d271;-webkit-box-shadow:none;box-shadow:none}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#fdd198}.has-warning .form-control,.has-warning .form-control:focus{border-color:#fdd198;-webkit-box-shadow:none;box-shadow:none}.bootstrap-timepicker-widget .form-control{padding:0}#notification_overview_filter label{display:block}#notification_overview_list .img-space{position:absolute;top:25px;left:25px}@media (max-width:767px){.notifications{position:inherit !important;float:left !important}.notifications .dropdown-menu{width:300px !important;margin-left:0 !important}.notifications .dropdown-menu .arrow{margin-left:-142px !important}}.badge-space{margin-top:6px}.badge-space-chooser{padding:3px 5px;margin-left:1px}.badge{padding:3px 5px;border-radius:2px;font-weight:normal;font-family:Arial,sans-serif;font-size:10px !important;text-transform:uppercase;color:#fff;vertical-align:baseline;white-space:nowrap;text-shadow:none;background-color:#d7d7d7;line-height:1}.popover{border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);-moz-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175)}.popover .popover-title{background:none;border-bottom:none;color:#555;font-weight:300;font-size:16px;padding:15px}.popover .popover-content{font-size:13px;padding:5px 15px;color:#555}.popover .popover-content a{color:#6fdbe8}.popover .popover-content img{max-width:100%}.popover .popover-navigation{padding:15px}.list-group-item{padding:6px 15px;border:none;border-width:0 !important;border-left:3px solid #fff !important;font-size:12px;font-weight:600}.list-group-item i{font-size:14px}a.list-group-item:hover,a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#555;background-color:#f7f7f7;border-left:3px solid #6fdbe8 !important}@media (max-width:991px){.list-group{margin-left:4px}.list-group-item{display:inline-block !important;border-radius:3px !important;margin:4px 0;margin-bottom:4px !important}.list-group-item{border:none !important}a.list-group-item:hover,a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{border:none !important;background:#708fa0 !important;color:#fff !important}}@media screen and (max-width:768px){.modal-dialog{width:auto !important;padding-top:30px;padding-bottom:30px}}.modal-top{z-index:999999 !important}.modal{overflow-y:visible}.modal-dialog-extra-small{width:400px}.modal-dialog-small{width:500px}.modal-dialog-normal{width:600px}.modal-dialog-medium{width:768px}.modal-dialog-large{width:900px}@media screen and (max-width:920px){.modal-dialog-large{width:auto !important;padding-top:30px;padding-bottom:30px}}.modal{border:none}.modal h1,.modal h2,.modal h3,.modal h4,.modal h5{margin-top:20px;color:#555;font-weight:300}.modal h4.media-heading{margin-top:0}.modal-title{font-size:20px;font-weight:200;color:#555}.modal-dialog,.modal-content{min-width:150px}.modal-content{-webkit-border-radius:3px;-moz-border-radius:3px;box-shadow:0 2px 26px rgba(0,0,0,0.3),0 0 0 1px rgba(0,0,0,0.1);-webkit-box-shadow:0 2px 26px rgba(0,0,0,0.3),0 0 0 1px rgba(0,0,0,0.1);-moz-box-shadow:0 2px 26px rgba(0,0,0,0.3),0 0 0 1px rgba(0,0,0,0.1);border:none}.modal-content .modal-header{padding:20px 20px 0;border-bottom:none;text-align:center}.modal-content .modal-header .close{margin-top:2px;margin-right:5px}.modal-content .modal-body{padding:20px;font-size:13px}.modal-content .modal-footer{margin-top:0;text-align:left;padding:10px 20px 30px;border-top:none;text-align:center}.modal-content .modal-footer hr{margin-top:0}.modal-backdrop{background-color:rgba(0,0,0,0.5)}.modal-dialog.fadeIn,.modal-dialog.pulse{-webkit-animation-duration:200ms;-moz-animation-duration:200ms;animation-duration:200ms}.module-installed{opacity:.5}.module-installed .label-success{background-color:#d7d7d7}.tooltip-inner{background-color:#708fa0;max-width:400px;text-align:left;font-weight:300;padding:2px 8px 4px;font-weight:bold;white-space:pre-wrap}.tooltip.top .tooltip-arrow{border-top-color:#708fa0}.tooltip.top-left .tooltip-arrow{border-top-color:#708fa0}.tooltip.top-right .tooltip-arrow{border-top-color:#708fa0}.tooltip.right .tooltip-arrow{border-right-color:#708fa0}.tooltip.left .tooltip-arrow{border-left-color:#708fa0}.tooltip.bottom .tooltip-arrow{border-bottom-color:#708fa0}.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#708fa0}.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#708fa0}.tooltip.in{opacity:1;filter:alpha(opacity=100)}.progress{height:10px;margin-bottom:15px;box-shadow:none;background:#ededed;border-radius:10px}.progress-bar-info{background-color:#6fdbe8;-webkit-box-shadow:none;box-shadow:none}#nprogress .bar{height:2px;background:#6fdbe8}table{margin-bottom:0 !important}table th{font-size:11px;color:#bebebe;font-weight:normal}table thead tr th{border:none !important}table .time{font-size:12px}table td a:hover{color:#6fdbe8}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:10px 10px 10px 0}.table>thead>tr>th select,.table>tbody>tr>th select,.table>tfoot>tr>th select,.table>thead>tr>td select,.table>tbody>tr>td select,.table>tfoot>tr>td select{font-size:12px;padding:4px 8px;height:30px;margin:0}.table-middle>thead>tr>th,.table-middle>tbody>tr>th,.table-middle>tfoot>tr>th,.table-middle>thead>tr>td,.table-middle>tbody>tr>td,.table-middle>tfoot>tr>td{vertical-align:middle !important}.comment-container{margin-top:10px}.comment-container .wall-entry-controls{margin-left:50px}.comment .media{position:relative !important;margin-top:0}.comment .media .nav-pills.preferences{display:none;right:-3px;top:-3px}.comment .media-body{overflow:visible}.comment .jp-progress{background-color:#dbdcdd !important}.comment .jp-play-bar{background:#cacaca}.comment .content a{color:#21bdd0}.comment.guest-mode .media:last-child .wall-entry-controls{margin-bottom:0;margin-left:50px}.comment.guest-mode .media:last-child hr{display:none}.comment_create,.content_edit{position:relative}.comment_create .comment-buttons,.content_edit .comment-buttons{position:absolute;bottom:2px;right:5px}.comment_create .btn-comment-submit,.content_edit .btn-comment-submit{margin-top:3px}.comment_create .fileinput-button,.content_edit .fileinput-button{float:left;padding:6px 10px;background:transparent !important}.comment_create .fileinput-button .fa,.content_edit .fileinput-button .fa{color:#d7d7d7}.comment_create .fileinput-button:hover .fa,.content_edit .fileinput-button:hover .fa{background:transparent !important;color:#b2b2b2}.comment_create .fileinput-button:active,.content_edit .fileinput-button:active{box-shadow:none !important}.post-richtext-input-group{position:relative}.post-richtext-input-group .comment-buttons{bottom:7px !important}.comment-container .content_edit{margin-left:50px}.comment_edit_content{margin-left:50px}.comment-message{overflow:hidden;overflow-wrap:break-word}.comment-create-input-group{position:relative}.comment-create-input-group .ProsemirrorEditor .ProseMirror{padding-right:72px}.comment-create-input-group.scrollActive .comment-buttons{right:22px}.grid-view img{width:24px;height:24px}.grid-view .filters input,.grid-view .filters select{border:2px solid #ededed;box-shadow:none;min-height:35px;border-radius:4px;font-size:12px;padding:4px}.grid-view .filters input:focus,.grid-view .filters select:focus{border:2px solid #6fdbe8;outline:0;box-shadow:none}.grid-view{padding:15px 0 0}.grid-view img{border-radius:3px}.grid-view table th{font-size:13px !important;font-weight:bold !important}.grid-view table td{vertical-align:middle !important}.grid-view table tr{font-size:13px !important}.grid-view table thead tr th:first-of-type{padding-left:5px}.grid-view table tbody tr{height:50px}.grid-view table tbody tr td:first-of-type{padding-left:5px}.grid-view .summary{font-size:12px;color:#bac2c7}.permission-grid-editor>.table>tbody>tr:first-child>td{border:none}.permission-grid-editor{padding-top:0}.detail-view td,.detail-view th{padding:8px !important}.detail-view th{font-size:13px}.oembed_snippet{margin-top:10px;position:relative;padding-bottom:55%;padding-top:15px;height:0;overflow:hidden}.oembed_snippet iframe{position:absolute;top:0;left:0;width:100%;height:100%}.activities{max-height:400px;overflow:auto}.activities li .media{position:relative}.activities li .media .img-space{position:absolute;top:14px;left:14px}.activities li .media .media-body{max-width:295px}.contentForm_options{margin-top:10px;min-height:29px}.contentForm_options .btn_container{position:relative}.contentForm_options .btn_container .label-public{position:absolute;right:40px;top:11px}#content-topic-bar{margin-top:5px;text-align:right}#content-topic-bar .label{margin-left:4px}#contentFormError{color:#ff8989;padding-left:0;list-style:none}.placeholder-empty-stream{background-image:url("../img/placeholder-postform-arrow.png");background-repeat:no-repeat;padding:37px 0 0 70px;margin-left:90px}.wall-entry{position:relative}.wall-entry .content p,.wall-entry .content a{overflow:hidden;text-overflow:ellipsis;max-width:100%}.wall-entry .content img{max-width:100%}.wall-entry .media{overflow:visible}.wall-entry .well{margin-bottom:0}.wall-entry .well .comment .show-all-link{font-size:12px;cursor:pointer}.wall-entry .media-heading{font-size:14px;padding-top:1px;margin-bottom:3px}.wall-entry .media-heading .labels{padding-right:32px}.wall-entry .media-heading .viaLink{font-size:13px}.wall-entry .media-heading .viaLink i{color:#bebebe;padding-left:4px;padding-right:4px}.wall-entry .media-subheading{color:#bebebe;font-size:12px}.wall-entry .media-subheading .time{font-size:12px;white-space:nowrap}.wall-entry-controls,.wall-entry-controls a{font-size:11px;font-weight:700;color:#7a7a7a;margin-top:10px;margin-bottom:0}#wall-stream-filter-nav{font-size:12px;margin-bottom:10px;padding-top:2px;border-radius:0 0 4px 4px}#wall-stream-filter-nav .wall-stream-filter-root{margin:0;border:0 !important}#wall-stream-filter-nav .filter-panel{padding:0 10px}#wall-stream-filter-nav .wall-stream-filter-head{padding:5px 5px 10px 5px;border-bottom:1px solid #ddd}#wall-stream-filter-nav .wall-stream-filter-body{overflow:hidden;background-color:#f7f7f7;border:1px solid #ddd;border-top:0;border-radius:0 0 4px 4px}#wall-stream-filter-nav hr{margin:5px 0 0 0}#wall-stream-filter-nav .topic-remove-label{float:left}#wall-stream-filter-nav .topic-remove-label,#wall-stream-filter-nav .content-type-remove-label{margin-right:6px}#wall-stream-filter-nav .select2{width:260px !important;margin-bottom:5px;margin-top:2px}#wall-stream-filter-nav .select2 .select2-search__field{height:25px !important}#wall-stream-filter-nav .select2 .select2-selection__choice{height:23px !important}#wall-stream-filter-nav .select2 .select2-selection__choice span,#wall-stream-filter-nav .select2 .select2-selection__choice i{line-height:19px !important}#wall-stream-filter-nav .select2 .select2-selection__choice .img-rounded{width:18px !important;height:18px !important}#wall-stream-filter-nav .wall-stream-filter-bar{display:inline;float:right;white-space:normal}#wall-stream-filter-nav .wall-stream-filter-bar .label{height:18px;padding-top:4px}#wall-stream-filter-nav .wall-stream-filter-bar .btn,#wall-stream-filter-nav .wall-stream-filter-bar .label{box-shadow:0 0 2px #7a7a7a;-webkit-box-shadow:0 0 2px #7a7a7a;-moz-box-shadow:0 0 2px #7a7a7a}@media (max-width:767px){#wall-stream-filter-nav .wall-stream-filter-root{white-space:nowrap}#wall-stream-filter-nav .wall-stream-filter-body{overflow:auto}}.filter-root{margin:15px}.filter-root .row{display:table !important}.filter-root .filter-panel{padding:0 5px;display:table-cell !important;float:none}.filter-root .filter-panel .filter-block strong{margin-bottom:5px}.filter-root .filter-panel .filter-block ul.filter-list{list-style:none;padding:0;margin:0 0 5px}.filter-root .filter-panel .filter-block ul.filter-list li{font-size:12px;padding:2px}.filter-root .filter-panel .filter-block ul.filter-list li a{color:#555}.filter-root .filter-panel div.filter-block:last-of-type ul.filter-list{margin:0}.filter-root .filter-panel+.filter-panel{border-left:2px solid #ededed}.stream-entry-loader{float:right;margin-top:5px}.load-suppressed{margin-top:-17px;margin-bottom:15px;text-align:center}.load-suppressed a{display:inline-block;background-color:white;padding:5px;border-radius:0 0 4px 4px;border:1px solid #ddd;font-size:11px}.space-owner{text-align:center;margin:14px 0;font-size:13px;color:#999}.space-member-sign{color:#97d271;position:absolute;top:42px;left:42px;font-size:16px;background:#fff;width:24px;height:24px;padding:2px 3px 1px 4px;border-radius:50px;border:2px solid #97d271}#space-menu-dropdown i.type{font-size:16px;color:#BFBFBF}#space-menu-spaces [data-space-chooser-item]{cursor:pointer}#space-menu-dropdown .input-group-addon{border-radius:0 4px 4px 0}#space-menu-dropdown .input-group-addon.focus{border-radius:0 4px 4px 0;border:2px solid #6fdbe8;border-left:0}#space-menu-search{border-right:0}#space-directory-link i{margin-right:0}.space-acronym{color:#fff;text-align:center;display:inline-block}.current-space-image{margin-right:3px;margin-top:3px}@media (max-width:767px){#space-menu>.title{display:none}#space-menu-dropdown{width:300px !important}}.files,#postFormFiles_list{padding-left:0}.contentForm-upload-list{padding-left:0}.contentForm-upload-list li:first-child{margin-top:10px}.file_upload_remove_link,.file_upload_remove_link:hover{color:#ff8989;cursor:pointer}.file-preview-item{text-overflow:ellipsis;overflow:hidden}.post-files{margin-top:10px}.post-files img{vertical-align:top;margin-bottom:3px;margin-right:5px;max-height:100%;-webkit-animation-duration:2s;animation-duration:2s}#wallStream.mobile .post-files{margin-top:10px;display:flex;overflow-x:auto}#wallStream.mobile .post-files img{max-width:190px}.file-preview-content{cursor:pointer}.image-upload-container{position:relative}.image-upload-container .image-upload-buttons{display:none;position:absolute;right:5px;bottom:5px}.image-upload-container input[type="file"]{position:absolute;opacity:0}.image-upload-container .image-upload-loader{display:none;position:absolute;top:0;left:0;width:100%;height:100%;padding:20px;background:#f8f8f8}.mime{background-repeat:no-repeat;background-position:0 0;padding:1px 0 4px 26px}.mime-word{background-image:url("../img/mime/word.png")}.mime-excel{background-image:url("../img/mime/excel.png")}.mime-powerpoint{background-image:url("../img/mime/powerpoint.png")}.mime-pdf{background-image:url("../img/mime/pdf.png")}.mime-zip{background-image:url("../img/mime/zip.png")}.mime-image{background-image:url("../img/mime/image.png")}.mime-file{background-image:url("../img/mime/file.png")}.mime-photoshop{background-image:url("../img/mime/photoshop.png")}.mime-illustrator{background-image:url("../img/mime/illustrator.png")}.mime-video{background-image:url("../img/mime/video.png")}.mime-audio{background-image:url("../img/mime/audio.png")}ul.tour-list{list-style:none;margin-bottom:0;padding-left:10px}ul.tour-list li{padding-top:5px}ul.tour-list li a{color:#6fdbe8}ul.tour-list li a .fa{width:16px}ul.tour-list li.completed a{text-decoration:line-through;color:#bebebe}.atwho-view .cur{border-left:3px solid #6fdbe8;background-color:#f7f7f7 !important}.atwho-user,.atwho-space,.atwho-input a{color:#6fdbe8}.atwho-input a:hover{color:#6fdbe8}.atwho-view strong{background-color:#f9f0d2}.atwho-view .cur strong{background-color:#f9f0d2}.atwho-view span{padding:5px}.sk-spinner-three-bounce.sk-spinner{margin:0 auto;width:70px;text-align:center}.loader{padding:30px 0}.loader .sk-spinner-three-bounce div,.loader .sk-spinner-three-bounce span{width:12px;height:12px;background-color:#6fdbe8;border-radius:100%;display:inline-block;-webkit-animation:sk-threeBounceDelay 1.4s infinite ease-in-out;animation:sk-threeBounceDelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.loader .sk-spinner-three-bounce .sk-bounce1{-webkit-animation-delay:-0.32s;animation-delay:-0.32s}.loader .sk-spinner-three-bounce .sk-bounce2{-webkit-animation-delay:-0.16s;animation-delay:-0.16s}@-webkit-keyframes sk-threeBounceDelay{0%,80%,100%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes sk-threeBounceDelay{0%,80%,100%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.loader-modal{padding:8px 0}.loader-postform{padding:9px 0}.loader-postform .sk-spinner-three-bounce.sk-spinner{text-align:left;margin:0}.markdown-render h1,.markdown-render h2,.markdown-render h3,.markdown-render h4,.markdown-render h5,.markdown-render h6{font-weight:bold !important}.markdown-render h1{font-size:28px !important}.markdown-render h2{font-size:24px !important}.markdown-render h3{font-size:18px !important}.markdown-render h4{font-size:16px !important}.markdown-render h5{font-size:14px !important}.markdown-render h6{color:#999;font-size:14px !important}.markdown-render pre{padding:0;border:none;border-radius:3px}.markdown-render pre code{padding:10px;border-radius:3px;font-size:12px !important}.markdown-render a,.markdown-render a:visited{background-color:inherit;text-decoration:none;color:#6fdbe8 !important}.markdown-render a.header-anchor{color:#777 !important}.markdown-render img{max-width:100%}.markdown-render table{width:100%}.markdown-render table th{font-size:13px;font-weight:700;color:#555}.markdown-render table thead tr{border-bottom:1px solid #d7d7d7}.markdown-render table tbody tr td,.markdown-render table thead tr th{border:1px solid #d7d7d7 !important;padding:4px}.md-editor.active{border:2px solid #6fdbe8 !important}.md-editor textarea{padding:10px !important}[data-ui-markdown],[data-ui-richtext]{overflow:hidden;overflow-wrap:break-word}[data-ui-markdown] h1,[data-ui-richtext] h1,[data-ui-markdown] h2,[data-ui-richtext] h2,[data-ui-markdown] h3,[data-ui-richtext] h3,[data-ui-markdown] h4,[data-ui-richtext] h4,[data-ui-markdown] h5,[data-ui-richtext] h5,[data-ui-markdown] h6,[data-ui-richtext] h6{text-align:start;margin:0 0 .5em}[data-ui-markdown] h1,[data-ui-richtext] h1{font-size:1.7em !important;font-weight:600}[data-ui-markdown] h2,[data-ui-richtext] h2{font-size:1.5em !important;font-weight:500}[data-ui-markdown] h3,[data-ui-richtext] h3{font-size:1.2em !important}[data-ui-markdown] h4,[data-ui-richtext] h4{font-size:1.1em !important}[data-ui-markdown] h5,[data-ui-richtext] h5{font-size:1em !important}[data-ui-markdown] h6,[data-ui-richtext] h6{font-size:.85em !important}[data-ui-markdown] p,[data-ui-richtext] p,[data-ui-markdown] pre,[data-ui-richtext] pre,[data-ui-markdown] blockquote,[data-ui-richtext] blockquote{margin:0 0 1.1em}[data-ui-markdown] p:last-child,[data-ui-richtext] p:last-child{margin:0}[data-ui-markdown] pre code.hljs,[data-ui-richtext] pre code.hljs{background-color:#f5f5f5}[data-ui-markdown] blockquote,[data-ui-richtext] blockquote{border-left-width:10px;background-color:rgba(128,128,128,0.05);border-top-right-radius:5px;border-bottom-right-radius:5px;padding:15px 20px;font-size:1em;border-left:5px solid #888888}[data-ui-markdown] table,[data-ui-richtext] table{width:100%}[data-ui-markdown] table th,[data-ui-richtext] table th{font-size:13px;font-weight:700;color:#555;background-color:#f7f7f7}[data-ui-markdown] table td,[data-ui-richtext] table td,[data-ui-markdown] table th,[data-ui-richtext] table th{border:1px solid #d7d7d7 !important;padding:6px}[data-ui-markdown] dt,[data-ui-richtext] dt,[data-ui-markdown] dd,[data-ui-richtext] dd{margin-top:5px;margin-bottom:5px;line-height:1.45}[data-ui-markdown] dt,[data-ui-richtext] dt{font-weight:bold}[data-ui-markdown] dd,[data-ui-richtext] dd{margin-left:40px}[data-ui-markdown] pre,[data-ui-richtext] pre{text-align:start;border:0;padding:10px 20px;border-radius:5px}[data-ui-markdown] pre code,[data-ui-richtext] pre code{white-space:pre !important}[data-ui-markdown] blockquote ul:last-child,[data-ui-richtext] blockquote ul:last-child,[data-ui-markdown] blockquote ol:last-child,[data-ui-richtext] blockquote ol:last-child{margin-bottom:0}[data-ui-markdown] ul,[data-ui-richtext] ul,[data-ui-markdown] ol,[data-ui-richtext] ol{margin-top:0;margin-bottom:10.5px}[data-ui-markdown] ul li p,[data-ui-richtext] ul li p,[data-ui-markdown] ol li p,[data-ui-richtext] ol li p{overflow:visible !important}[data-ui-markdown] .footnote,[data-ui-richtext] .footnote{vertical-align:top;position:relative;top:-0.5em;font-size:.8em}[data-ui-markdown] .emoji,[data-ui-richtext] .emoji{width:16px}[data-ui-markdown] a.not-found,[data-ui-richtext] a.not-found{color:#fdd198}[data-ui-markdown] li,[data-ui-richtext] li{border:0 !important;background-color:transparent !important;padding:0}[data-ui-markdown] img,[data-ui-richtext] img{max-width:100%}blockquote{border-left:2px dotted #888;padding-left:5px;background:#d0f0ff}.wmd-panel{min-width:500px}.wmd-button-bar{width:100%;background-color:Silver}.wmd-input{height:300px;width:100%;background-color:Gainsboro;border:1px solid DarkGray}.wmd-button-row{position:relative;margin-left:5px;margin-right:5px;margin-bottom:5px;margin-top:10px;padding:0;height:20px}.wmd-spacer{width:1px;height:20px;margin-left:14px;position:absolute;background-color:Silver;display:inline-block;list-style:none}.wmd-button{width:20px;height:20px;padding-left:2px;padding-right:3px;position:absolute;display:inline-block;list-style:none;cursor:pointer}.wmd-button>span{background-image:url(../img/wmd-buttons.png);background-repeat:no-repeat;background-position:0 0;width:20px;height:20px;display:inline-block}.wmd-spacer1{left:50px}.wmd-spacer2{left:175px}.wmd-spacer3{left:300px}.wmd-prompt-background{background-color:Black}.wmd-prompt-dialog{border:1px solid #999999;background-color:#F5F5F5}.wmd-prompt-dialog>div{font-size:.8em;font-family:arial,helvetica,sans-serif}.wmd-prompt-dialog>form>input[type="text"]{border:1px solid #999999;color:black}.wmd-prompt-dialog>form>input[type="button"]{border:1px solid #888888;font-family:trebuchet MS,helvetica,sans-serif;font-size:.8em;font-weight:bold}@media (max-width:991px){.layout-sidebar-container{display:none}}.ui-widget-header{border:none !important;background:#fff !important;color:#7a7a7a !important;font-weight:300 !important}.ui-widget-content{border:1px solid #dddcda !important;border-radius:0 !important;background:#fff;color:#555 !important;-webkit-box-shadow:0 6px 6px rgba(0,0,0,0.1);box-shadow:0 6px 6px rgba(0,0,0,0.1)}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{opacity:.2}.ui-datepicker .ui-datepicker-prev:hover,.ui-datepicker .ui-datepicker-next:hover{background:#fff !important;border:none;margin:1px}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:none !important;background:#f7f7f7 !important;color:#7a7a7a !important}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:none !important;border:1px solid #b2b2b2 !important}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #6fdbe8 !important;background:#ddf6fa !important}.status-bar-body{color:white;position:fixed;width:100%;background-color:rgba(0,0,0,0.7);text-align:center;padding:20px;z-index:9999999;bottom:0;display:block;line-height:20px}.status-bar-close{color:white;fonfont-weight:bold;font-size:21px;cursor:pointer}.status-bar-close:hover{color:white}.status-bar-close i{vertical-align:top !important;padding-top:3px}.status-bar-content i{margin-right:10px;font-size:21px;vertical-align:middle}.status-bar-content .showMore{color:#6fdbe8;float:right;margin-left:10px;font-size:.7em;cursor:pointer;vertical-align:middle;white-space:nowrap}.status-bar-content .status-bar-details{text-align:left;font-size:.7em;margin-top:20px;max-height:200px;overflow:auto}.status-bar-content span{vertical-align:middle}.status-bar-content i.error,.status-bar-content i.fatal{color:#ff8989}.status-bar-content i.warning{color:#fdd198}.status-bar-content i.info,.status-bar-content i.debug{color:#6fdbe8}.status-bar-content i.success{color:#85CA2B}.highlight{background-color:#fff8e0}.alert-default{color:#555;background-color:#f7f7f7;border-color:#ededed;font-size:13px}.alert-default .info{margin:10px 0}.alert-success{color:#84be5e;background-color:#f7fbf4;border-color:#97d271}.alert-warning{color:#e9b168;background-color:#fffbf7;border-color:#fdd198}.alert-danger{color:#ff8989;background-color:#fff6f6;border-color:#ff8989}.data-saved{padding-left:10px;color:#6fdbe8}img.bounceIn{-webkit-animation-duration:800ms;-moz-animation-duration:800ms;animation-duration:800ms}.tags .tag{margin-top:5px;border-radius:2px;padding:4px 8px;text-transform:uppercase;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ProsemirrorEditor.fullscreen{position:fixed;top:0;left:0;width:100%;height:100%;z-index:9998}.ProsemirrorEditor.fullscreen .ProseMirror-menubar-wrapper{height:100%}.ProsemirrorEditor.fullscreen .humhub-ui-richtext{max-height:none !important}.ProsemirrorEditor.fullscreen .ProseMirror{position:static;overflow:auto;heigh:100%;height:calc(100% - 26px);height:-o-calc(100% - 26px);height:-webkit-calc(100% - 26px)}.ProsemirrorEditor.fullscreen .ProseMirror-menubar{position:static !important;top:0 !important;left:0 !important;margin:0 !important;width:100% !important}.ProsemirrorEditor .ProseMirror{padding-right:12px}.ProsemirrorEditor .ProseMirror-menu{margin:0 -4px;line-height:1}.ProsemirrorEditor .ProseMirror-tooltip .ProseMirror-menu{width:-webkit-fit-content;width:fit-content;white-space:pre}.ProsemirrorEditor .ProseMirror-menuitem{margin-right:0;display:inline-block}.ProsemirrorEditor .ProseMirror-menuseparator{border-right:1px solid #ddd;margin-right:3px}.ProsemirrorEditor .ProseMirror-menuitem .ProseMirror-menu-group{border-right:1px solid #ddd}.ProsemirrorEditor .ProseMirror-menuitem .ProseMirror-menu-group.last{border-right:none}.ProsemirrorEditor .ProseMirror-menuitem .seperator{border-right:1px solid #ddd;margin-right:2px;padding-right:2px}.ProsemirrorEditor .ProseMirror-menu-dropdown,.ProsemirrorEditor .ProseMirror-menu-dropdown-menu{font-size:90%;white-space:nowrap}.ProsemirrorEditor .ProseMirror-menu-dropdown{cursor:pointer;position:relative;padding-right:15px !important}.ProsemirrorEditor .ProseMirror-menu-dropdown-wrap{padding:1px 0 1px 0;display:inline-block;position:relative}.ProsemirrorEditor .ProseMirror-menu-dropdown-right{right:0}.ProsemirrorEditor .ProseMirror-menu-dropdown:after{content:"";border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid currentColor;opacity:.6;position:absolute;right:4px;top:calc(48%)}.ProsemirrorEditor .ProseMirror-menu-submenu{border-top-right-radius:4px}.ProsemirrorEditor .ProseMirror-menu-dropdown-menu,.ProsemirrorEditor .ProseMirror-menu-submenu{position:absolute;background:white;color:#666;border:1px solid #aaa;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.ProsemirrorEditor .ProseMirror-menu-dropdown-menu{z-index:15;min-width:6em;margin-top:2px}.ProsemirrorEditor .ProseMirror-menu-dropdown-item{cursor:pointer}.ProsemirrorEditor .ProseMirror-menu-dropdown-item div[title],.ProsemirrorEditor .ProseMirror-menu-submenu-wrap{padding:4px}.ProsemirrorEditor .ProseMirror-menu-dropdown-item:hover{background:#f2f2f2}.ProsemirrorEditor .ProseMirror-menu-submenu-wrap{position:relative}.ProsemirrorEditor .ProseMirror-menu-submenu-label:after{content:"";border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid currentColor;opacity:.6;position:absolute;right:4px;top:calc(46%)}.ProsemirrorEditor .ProseMirror-menu-submenu{display:none;min-width:4em;left:100%;top:0}.ProsemirrorEditor .ProseMirror-menu-active{background:#eee;border-radius:4px;border:1px solid #ededed !important}.ProsemirrorEditor .ProseMirror-menu-disabled{opacity:.3}.ProsemirrorEditor .ProseMirror-menu-submenu-wrap:hover .ProseMirror-menu-submenu,.ProsemirrorEditor .ProseMirror-menu-submenu-wrap-active .ProseMirror-menu-submenu{display:block}.ProsemirrorEditor .ProseMirror-icon{display:inline-block;line-height:.8;vertical-align:-2px;padding:1px 7px;cursor:pointer;border:1px solid transparent}.ProsemirrorEditor .ProseMirror-menu-disabled.ProseMirror-icon{cursor:default}.ProsemirrorEditor .ProseMirror-icon svg{fill:currentColor;height:1em}.ProsemirrorEditor .ProseMirror-icon span{vertical-align:text-top}.ProsemirrorEditor.plainMenu .ProseMirror{border-top-left-radius:0 !important;border-top-right-radius:0 !important;border-top-width:1px !important}.ProsemirrorEditor.plainMenu .ProseMirror-menu-group{padding:5px}.ProsemirrorEditor.plainMenu .ProseMirror-menuitem .ProseMirror-menu-group{padding:2px}.ProsemirrorEditor.plainMenu .ProseMirror-menubar~.ProseMirror-focused{border-color:#6fdbe8 !important}.ProsemirrorEditor.plainMenu .ProseMirror-textblock-dropdown{min-width:3em}.ProsemirrorEditor.plainMenu .ProseMirror-menubar-wrapper{z-index:8}.ProsemirrorEditor.plainMenu .ProseMirror-menubar{background-color:#f7f7f7;border-top-left-radius:4px;border-top-right-radius:4px;border:1px solid #ddd;position:relative;min-height:1em;color:#666;padding:1px 6px 1px 0;top:0;left:0;right:0;z-index:10;-moz-box-sizing:border-box;box-sizing:border-box;overflow:visible}.ProsemirrorEditor.focusMenu .form-control:focus{border-top-left-radius:0 !important}.ProsemirrorEditor.focusMenu .ProseMirror-menubar{display:table;min-height:1em;color:#666;padding:2px 6px;top:0;left:0;right:0;z-index:10;-moz-box-sizing:border-box;box-sizing:border-box;overflow:visible;margin-top:-26px;background:white;border:1px solid #d7d7d7;border-bottom:0;border-top:2px solid #d7d7d7;border-top-left-radius:4px;border-top-right-radius:4px;float:left}@-moz-document url-prefix(){.ProsemirrorEditor.focusMenu .ProseMirror-menubar{margin-top:-27px}}.ProsemirrorEditor .ProseMirror{position:relative;word-wrap:break-word;white-space:pre-wrap;-webkit-font-variant-ligatures:none;font-variant-ligatures:none}.ProsemirrorEditor .ProseMirror ul,.ProsemirrorEditor .ProseMirror ol{cursor:default}.ProsemirrorEditor .ProseMirror pre{white-space:pre-wrap}.ProsemirrorEditor .ProseMirror li{position:relative}.ProsemirrorEditor .ProseMirror img{max-width:100%}.ProsemirrorEditor .ProseMirror-hideselection *::selection{background:transparent}.ProsemirrorEditor .ProseMirror-hideselection *::-moz-selection{background:transparent}.ProsemirrorEditor .ProseMirror-selectednode{outline:2px dashed #8cf}.ProsemirrorEditor li.ProseMirror-selectednode{outline:none}.ProsemirrorEditor li.ProseMirror-selectednode:after{content:"";position:absolute;left:-32px;right:-2px;top:-2px;bottom:-2px;border:2px solid #8cf;pointer-events:none}.ProsemirrorEditor .ProseMirror-textblock-dropdown{min-width:3em}.ProsemirrorEditor .ProseMirror-menu{margin:0 -4px;line-height:1}.ProsemirrorEditor .ProseMirror-tooltip .ProseMirror-menu{width:-webkit-fit-content;width:fit-content;white-space:pre}.ProsemirrorEditor .ProseMirror-gapcursor{display:none;pointer-events:none;position:absolute}.ProsemirrorEditor .ProseMirror-gapcursor:after{content:"";display:block;position:absolute;top:-2px;width:20px;border-top:1px solid black;animation:ProseMirror-cursor-blink 1.1s steps(2, start) infinite}@keyframes ProseMirror-cursor-blink{to{visibility:hidden}}.ProsemirrorEditor .ProseMirror-focused .ProseMirror-gapcursor{display:block}.ProsemirrorEditor .ProseMirror-example-setup-style hr{padding:2px 10px;border:none;margin:1em 0}.ProsemirrorEditor .ProseMirror-example-setup-style hr:after{content:"";display:block;height:1px;background-color:silver;line-height:2px}.ProsemirrorEditor .ProseMirror ul,.ProsemirrorEditor .ProseMirror ol{padding-left:30px}.ProsemirrorEditor .ProseMirror blockquote{padding-left:1em;border-left:3px solid #eee;margin-left:0;margin-right:0}.ProsemirrorEditor .ProseMirror-example-setup-style img{cursor:default}.ProsemirrorEditor .ProseMirror p{margin-top:1em}.ProsemirrorEditor .ProseMirror p:first-child{margin:0}.ProsemirrorEditor .ProseMirror p:first-child+*{margin-top:1em}.ProsemirrorEditor .ProsemirrorEditor{position:relative}.ProsemirrorEditor .ProsemirrorEditor .ProseMirror{padding-right:12px !important}.ProsemirrorEditor .ProsemirrorEditor img{max-width:100%}.ProsemirrorEditor .ProseMirror h1:first-child,.ProsemirrorEditor .ProseMirror h2:first-child,.ProsemirrorEditor .ProseMirror h3:first-child,.ProsemirrorEditor .ProseMirror h4:first-child,.ProsemirrorEditor .ProseMirror h5:first-child,.ProsemirrorEditor .ProseMirror h6:first-child{margin-top:10px}.ProsemirrorEditor .ProseMirror [data-mention]{color:#6fdbe8}.ProsemirrorEditor .ProseMirror{outline:none}.ProsemirrorEditor .ProseMirror [data-oembed]{font-size:0}.ProsemirrorEditor .ProseMirror iframe{pointer-events:none;display:block}.ProsemirrorEditor .ProseMirror p{margin-bottom:1em}.ProsemirrorEditor .ProseMirror-textblock-dropdown{min-width:3em}.ProsemirrorEditor .ProseMirror .placeholder{padding:0 !important;pointer-events:none;height:0}.ProsemirrorEditor .ProseMirror:focus .placeholder{display:none}.ProsemirrorEditor .ProseMirror .tableWrapper{overflow-x:auto}.ProsemirrorEditor .ProseMirror .column-resize-handle{position:absolute;right:-2px;top:0;bottom:0;width:4px;z-index:20;background-color:#adf;pointer-events:none}.ProsemirrorEditor .ProseMirror.resize-cursor{cursor:ew-resize;cursor:col-resize}.ProsemirrorEditor .ProseMirror .selectedCell:after{z-index:2;position:absolute;content:"";left:0;right:0;top:0;bottom:0;background:rgba(200,200,255,0.4);pointer-events:none}.ProsemirrorEditor .ProseMirror-menubar-wrapper{position:relative;outline:none}.ProsemirrorEditor .ProseMirror table{margin:0}.ProsemirrorEditor .ProseMirror .tableWrapper{margin:1em 0}.ProseMirror-prompt{background:white;padding:5px 10px 5px 15px;border:1px solid silver;position:fixed;border-radius:3px;min-width:300px;z-index:999999;box-shadow:-0.5px 2px 5px rgba(0,0,0,0.2)}.ProseMirror-prompt h5{font-weight:bold;font-size:100%;margin:15px 0}.ProseMirror-prompt input{margin-bottom:5px}.ProseMirror-prompt-close{position:absolute;left:2px;top:1px;color:#666;border:none;background:transparent;padding:0}.ProseMirror-prompt-close:after{content:"✕";font-size:12px}.ProseMirror-invalid{background:#ffc;border:1px solid #cc7;border-radius:4px;padding:5px 10px;position:absolute;min-width:10em}.ProseMirror-prompt-buttons{margin:15px 0;text-align:center}.atwho-view .cur{border-left:3px solid #59d6e4;background-color:#f7f7f7 !important}.atwho-user,.atwho-space,.atwho-input a{color:#59d6e4}.atwho-input a:hover{color:#59d6e4}.atwho-view strong{background-color:#f9f0d2}.atwho-view .cur strong{background-color:#f9f0d2}[data-emoji-category]{max-height:200px;display:block;position:relative;overflow:auto}[data-emoji-category] .atwho-emoji-entry{width:24px;height:28px;overflow:hidden}[data-emoji-category] .atwho-emoji-entry.cur{background-color:#ededed !important}.emoji-nav{padding-top:10px}.emoji-nav .emoji-nav-item{border-top:2px solid #fff8e0}.emoji-nav .emoji-nav-item.cur{border-left:0;border-top:2px solid #6fdbe8}@media screen and (max-width:768px){.ProsemirrorEditor.focusMenu .ProseMirror-menubar{min-height:1em}}/*! Select2 humhub Theme v0.1.0-beta.4 | MIT License | github.com/select2/select2-humhub-theme */.select2-container--humhub{display:block}.select2-container--humhub .select2-selection{background-color:#fff;border:2px solid #ededed;border-radius:4px;color:#555;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;outline:0}.select2-container--humhub .select2-search--dropdown .select2-search__field{background-color:#fff;border:2px solid #ededed;border-radius:4px;color:#555;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px}.select2-container--humhub .select2-search__field{outline:0}.select2-container--humhub .select2-search__field::-webkit-input-placeholder{color:#999}.select2-container--humhub .select2-search__field:-moz-placeholder{color:#999}.select2-container--humhub .select2-search__field::-moz-placeholder{color:#999;opacity:1}.select2-container--humhub .select2-search__field:-ms-input-placeholder{color:#999}.select2-container--humhub .select2-results__option[role=group]{padding:0}.select2-container--humhub .select2-results__option[aria-disabled=true]{color:#777;cursor:not-allowed}.select2-container--humhub .select2-results__option[aria-selected=true]{background-color:#f5f5f5;color:#262626;border-left:3px solid transparent}.select2-container--humhub .select2-results__option[aria-selected=false]{border-left:3px solid transparent}.select2-container--humhub .select2-results__option--highlighted[aria-selected]{background-color:#f7f7f7;border-left:3px solid #6fdbe8;color:#555}.select2-container--humhub .select2-results__option .select2-results__option{padding:6px 12px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option{margin-left:-12px;padding-left:24px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-24px;padding-left:36px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-36px;padding-left:48px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-48px;padding-left:60px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-60px;padding-left:72px}.select2-container--humhub .select2-results__group{color:#777;display:block;padding:6px 12px;font-size:12px;line-height:1.42857143;white-space:nowrap}.select2-container--humhub.select2-container--focus .select2-selection,.select2-container--humhub.select2-container--open .select2-selection{border:2px solid #6fdbe8;outline:0;box-shadow:none}.select2-container--humhub.select2-container--open .select2-selection .select2-selection__arrow b{border-color:transparent transparent #999 transparent;border-width:0 4px 4px 4px}.select2-container--humhub .select2-selection__clear{color:#999;cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--humhub .select2-selection__clear:hover{color:#333}.select2-container--humhub.select2-container--disabled .select2-selection{border-color:#ccc;-webkit-box-shadow:none;box-shadow:none}.select2-container--humhub.select2-container--disabled .select2-selection,.select2-container--humhub.select2-container--disabled .select2-search__field{cursor:not-allowed}.select2-container--humhub.select2-container--disabled .select2-selection,.select2-container--humhub.select2-container--disabled .select2-selection--multiple .select2-selection__choice{background-color:#eee}.select2-container--humhub.select2-container--disabled .select2-selection__clear,.select2-container--humhub.select2-container--disabled .select2-selection--multiple .select2-selection__choice__remove{display:none}.select2-container--humhub .select2-dropdown{-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);border-color:#d7d7d7;overflow-x:hidden;margin-top:-1px}.select2-container--humhub .select2-dropdown--above{margin-top:1px}.select2-container--humhub .select2-results>.select2-results__options{max-height:400px;overflow-y:auto}.select2-container--humhub .select2-selection--single{height:34px;line-height:1.42857143;padding:6px 24px 6px 12px}.select2-container--humhub .select2-selection--single .select2-selection__arrow{position:absolute;bottom:0;right:12px;top:0;width:4px}.select2-container--humhub .select2-selection--single .select2-selection__arrow b{border-color:#999 transparent transparent transparent;border-style:solid;border-width:4px 4px 0 4px;height:0;left:0;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--humhub .select2-selection--single .select2-selection__rendered{color:#555;padding:0}.select2-container--humhub .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--humhub .select2-selection--multiple{min-height:34px;padding:2px}.select2-container--humhub .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;display:block;line-height:1.42857143;list-style:none;margin:0;overflow:hidden;padding:0;width:100%;text-overflow:ellipsis;white-space:nowrap}.select2-container--humhub .select2-selection--multiple .select2-selection__placeholder{color:#999;float:left;margin-top:5px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice{color:#555;border-radius:4px;cursor:default;padding:0 6px;background-color:#6fdbe8;color:#fff;border-radius:3px;font-size:12px !important;padding:0 5px 2px 2px;float:left;margin:2px;height:28px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice img,.select2-container--humhub .select2-selection--multiple .select2-selection__choice div{margin-right:5px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice span.no-image{line-height:27px;padding-left:5px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice i{margin:0 2px;line-height:27px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice .picker-close{cursor:pointer}.select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field{background:transparent;padding:0 5px;width:auto !important;height:32px;line-height:1.42857143;margin-top:0;min-width:5em}.select2-container--humhub .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:none;font-weight:bold;margin-right:3px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--humhub .select2-selection--multiple .select2-selection__clear{margin-top:6px}.select2-container--humhub.input-sm,.select2-container--humhub.input-lg{border-radius:0;font-size:12px;height:auto;line-height:1;padding:0}.select2-container--humhub.input-sm .select2-selection--single,.input-group-sm .select2-container--humhub .select2-selection--single,.form-group-sm .select2-container--humhub .select2-selection--single{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 22px 5px 10px}.select2-container--humhub.input-sm .select2-selection--single .select2-selection__arrow b,.input-group-sm .select2-container--humhub .select2-selection--single .select2-selection__arrow b,.form-group-sm .select2-container--humhub .select2-selection--single .select2-selection__arrow b{margin-left:-5px}.select2-container--humhub.input-sm .select2-selection--multiple,.input-group-sm .select2-container--humhub .select2-selection--multiple,.form-group-sm .select2-container--humhub .select2-selection--multiple{min-height:30px}.select2-container--humhub.input-sm .select2-selection--multiple .select2-selection__choice,.input-group-sm .select2-container--humhub .select2-selection--multiple .select2-selection__choice,.form-group-sm .select2-container--humhub .select2-selection--multiple .select2-selection__choice{font-size:12px;line-height:1.5;margin:4px 0 0 5px;padding:0 5px}.select2-container--humhub.input-sm .select2-selection--multiple .select2-search--inline .select2-search__field,.input-group-sm .select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field,.form-group-sm .select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field{padding:0 10px;font-size:12px;height:28px;line-height:1.5}.select2-container--humhub.input-sm .select2-selection--multiple .select2-selection__clear,.input-group-sm .select2-container--humhub .select2-selection--multiple .select2-selection__clear,.form-group-sm .select2-container--humhub .select2-selection--multiple .select2-selection__clear{margin-top:5px}.select2-container--humhub.input-lg .select2-selection--single,.input-group-lg .select2-container--humhub .select2-selection--single,.form-group-lg .select2-container--humhub .select2-selection--single{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 31px 10px 16px}.select2-container--humhub.input-lg .select2-selection--single .select2-selection__arrow,.input-group-lg .select2-container--humhub .select2-selection--single .select2-selection__arrow,.form-group-lg .select2-container--humhub .select2-selection--single .select2-selection__arrow{width:5px}.select2-container--humhub.input-lg .select2-selection--single .select2-selection__arrow b,.input-group-lg .select2-container--humhub .select2-selection--single .select2-selection__arrow b,.form-group-lg .select2-container--humhub .select2-selection--single .select2-selection__arrow b{border-width:5px 5px 0 5px;margin-left:-5px;margin-left:-10px;margin-top:-2.5px}.select2-container--humhub.input-lg .select2-selection--multiple,.input-group-lg .select2-container--humhub .select2-selection--multiple,.form-group-lg .select2-container--humhub .select2-selection--multiple{min-height:46px}.select2-container--humhub.input-lg .select2-selection--multiple .select2-selection__choice,.input-group-lg .select2-container--humhub .select2-selection--multiple .select2-selection__choice,.form-group-lg .select2-container--humhub .select2-selection--multiple .select2-selection__choice{font-size:18px;line-height:1.3333333;border-radius:4px;margin:9px 0 0 8px;padding:0 10px}.select2-container--humhub.input-lg .select2-selection--multiple .select2-search--inline .select2-search__field,.input-group-lg .select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field,.form-group-lg .select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field{padding:0 16px;font-size:18px;height:44px;line-height:1.3333333}.select2-container--humhub.input-lg .select2-selection--multiple .select2-selection__clear,.input-group-lg .select2-container--humhub .select2-selection--multiple .select2-selection__clear,.form-group-lg .select2-container--humhub .select2-selection--multiple .select2-selection__clear{margin-top:10px}.select2-container--humhub.input-lg.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #999 transparent;border-width:0 5px 5px 5px}.input-group-lg .select2-container--humhub.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #999 transparent;border-width:0 5px 5px 5px}.select2-container--humhub[dir="rtl"] .select2-selection--single{padding-left:24px;padding-right:12px}.select2-container--humhub[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:0;padding-left:0;text-align:right}.select2-container--humhub[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--humhub[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:12px;right:auto}.select2-container--humhub[dir="rtl"] .select2-selection--single .select2-selection__arrow b{margin-left:0}.select2-container--humhub[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--humhub[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder{float:right}.select2-container--humhub[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:0;margin-right:6px}.select2-container--humhub[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.has-warning .select2-dropdown,.has-warning .select2-selection{border-color:#fdd198}.has-warning .select2-container--focus .select2-selection,.has-warning .select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fffefc;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fffefc;border-color:#fcbb66}.has-warning.select2-drop-active{border-color:#fcbb66}.has-warning.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#fcbb66}.has-error .select2-dropdown,.has-error .select2-selection{border-color:#ff8989}.has-error .select2-container--focus .select2-selection,.has-error .select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffefef;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffefef;border-color:#ff5656}.has-error.select2-drop-active{border-color:#ff5656}.has-error.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#ff5656}.has-success .select2-dropdown,.has-success .select2-selection{border-color:#97d271}.has-success .select2-container--focus .select2-selection,.has-success .select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d0ebbe;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d0ebbe;border-color:#7bc64a}.has-success.select2-drop-active{border-color:#7bc64a}.has-success.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#7bc64a}.input-group .select2-container--humhub{display:table;table-layout:fixed;position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group.select2-humhub-prepend .select2-container--humhub .select2-selection{border-bottom-left-radius:0;border-top-left-radius:0}.input-group.select2-humhub-append .select2-container--humhub .select2-selection{border-bottom-right-radius:0;border-top-right-radius:0}.select2-humhub-append .select2-container--humhub,.select2-humhub-prepend .select2-container--humhub,.select2-humhub-append .input-group-btn,.select2-humhub-prepend .input-group-btn,.select2-humhub-append .input-group-btn .btn,.select2-humhub-prepend .input-group-btn .btn{vertical-align:top}.form-control.select2-hidden-accessible{position:absolute !important;width:1px !important}.form-inline .select2-container--humhub{display:inline-block}ul.tag_input{list-style:none;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;padding:0 0 9px 4px}ul.tag_input li img{margin:0 5px 0 0}.tag_input_field{outline:none;border:none !important;padding:5px 4px 0 !important;width:170px;margin:2px 0 0 !important}.userInput,.spaceInput{background-color:#6fdbe8;font-weight:600;color:#fff;border-radius:3px;font-size:12px !important;padding:2px;float:left;margin:3px 4px 0 0}.userInput i,.spaceInput i{padding:0 6px;font-size:14px;cursor:pointer;line-height:8px} \ No newline at end of file +.colorDefault{color:#ededed}.backgroundDefault{background:#ededed}.borderDefault{border-color:#ededed}.colorPrimary{color:#708fa0 !important}.backgroundPrimary{background:#708fa0 !important}.borderPrimary{border-color:#708fa0 !important}.colorInfo{color:#6fdbe8 !important}.backgroundInfo{background:#6fdbe8 !important}.borderInfo{border-color:#6fdbe8 !important}.colorSuccess{color:#97d271 !important}.backgroundSuccess{background:#97d271 !important}.borderSuccess{border-color:#97d271 !important}.colorWarning{color:#fdd198 !important}.backgroundWarning{background:#fdd198 !important}.borderWarning{border-color:#fdd198 !important}.colorDanger{color:#ff8989 !important}.backgroundDanger{background:#ff8989 !important}.borderDanger{border-color:#ff8989 !important}.colorFont1{color:#bac2c7 !important}.colorFont2{color:#7a7a7a !important}.colorFont3{color:#555 !important}.colorFont4{color:#bebebe !important}.colorFont5{color:#aeaeae !important}.heading{font-size:16px;font-weight:300;color:#555;background-color:white;border:none;padding:10px}.text-center{text-align:center !important}.text-break{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.img-rounded{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body{padding-top:130px;background-color:#ededed;color:#777;font-family:'Open Sans',sans-serif}body a,body a:hover,body a:focus,body a:active,body a.active{color:#555;text-decoration:none}@media (max-width:920px){body{padding-top:115px}}@media (min-width:768px) and (max-width:920px){body{padding-top:120px}}a:hover{text-decoration:none}hr{margin-top:10px;margin-bottom:10px}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{position:inherit}.layout-content-container,.layout-nav-container{padding:0 10px 0 15px}.layout-sidebar-container{padding:0 15px 0 5px}@media (max-width:768px){.layout-nav-container .left-navigation{margin-bottom:0px}.layout-nav-container,.layout-content-container{padding:0px 15px}}@media (min-width:768px) and (max-width:920px){#topbar-first .container,#topbar-second .container{padding-left:10px;padding-right:20px}}h4{font-weight:300;font-size:150%}input[type=text],input[type=password],input[type=select]{-webkit-appearance:none;-moz-appearance:none;appearance:none}.powered,.powered a{color:#b8c7d3 !important}.langSwitcher{display:inline-block}[data-ui-show-more]{overflow:hidden}.topbar{position:fixed;display:block;height:50px;width:100%;padding-left:15px;padding-right:15px}.topbar ul.nav{float:left}.topbar ul.nav>li{float:left}.topbar ul.nav>li>a{padding-top:15px;padding-bottom:15px;line-height:20px}.topbar .dropdown-footer{margin:10px}.topbar .dropdown-header{font-size:16px;padding:3px 10px;margin-bottom:10px;font-weight:300;color:#bebebe}.topbar .dropdown-header .dropdown-header-link{position:absolute;top:2px;right:10px}.topbar .dropdown-header .dropdown-header-link a{color:#6fdbe8 !important;font-size:12px;font-weight:normal}.topbar .dropdown-header:hover{color:#bebebe}#topbar-first{background-color:#708fa0;top:0;z-index:1030;color:white}#topbar-first .nav>li>a:hover,#topbar-first .nav>.open>a{background-color:#8fa7b4}#topbar-first .nav>.account{height:50px;margin-left:20px}#topbar-first .nav>.account img{margin-left:10px}#topbar-first .nav>.account .dropdown-toggle{padding:10px 5px 8px;line-height:1.1em;text-align:left}#topbar-first .nav>.account .dropdown-toggle span{font-size:12px}#topbar-first .topbar-brand{position:relative;z-index:2}#topbar-first .topbar-actions{position:relative;z-index:3}#topbar-first .notifications{position:absolute;left:0;right:0;text-align:center;z-index:1}#topbar-first .notifications .btn-group{position:relative;text-align:left}#topbar-first .notifications .btn-group>a{padding:5px 10px;margin:10px 2px;display:inline-block;border-radius:2px;text-decoration:none;text-align:left}#topbar-first .notifications .btn-group>.label{position:absolute;top:4px;right:-2px}#topbar-first .notifications .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;border-width:10px;content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff;z-index:1035}#topbar-first .notifications .arrow{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;z-index:1001;border-width:11px;left:50%;margin-left:-18px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.15);top:-19px;z-index:1035}#topbar-first .notifications .dropdown-menu{width:350px;margin-left:-148px}#topbar-first .notifications .dropdown-menu ul.media-list{max-height:400px;overflow:auto}#topbar-first .notifications .dropdown-menu li{position:relative}#topbar-first .notifications .dropdown-menu li i.approval{position:absolute;left:2px;top:36px;font-size:14px}#topbar-first .notifications .dropdown-menu li i.accepted{color:#5cb85c}#topbar-first .notifications .dropdown-menu li i.declined{color:#d9534f}#topbar-first .notifications .dropdown-menu li .media{position:relative}#topbar-first .notifications .dropdown-menu li .media .img-space{position:absolute;top:14px;left:14px}#topbar-first .dropdown-footer{margin:10px 10px 5px}#topbar-first a{color:white}#topbar-first .caret{border-top-color:#bebebe}#topbar-first .btn-group>a{background-color:#7f9baa}#topbar-first .btn-enter{background-color:#7f9baa;margin:6px 0}#topbar-first .btn-enter:hover{background-color:#89a2b0}#topbar-first .media-list a{color:#555;padding:0}#topbar-first .media-list li{color:#555}#topbar-first .media-list li i.accepted{color:#6fdbe8 !important}#topbar-first .media-list li i.declined{color:#ff8989 !important}#topbar-first .media-list li.placeholder{border-bottom:none}#topbar-first .media-list .media .media-body .label{padding:0.1em 0.5em}#topbar-first .account .user-title{text-align:right}#topbar-first .account .user-title span{color:#d7d7d7}#topbar-first .dropdown.account>a,#topbar-first .dropdown.account.open>a,#topbar-first .dropdown.account>a:hover,#topbar-first .dropdown.account.open>a:hover{background-color:#708fa0}#topbar-second{top:50px;background-color:#fff;z-index:1029;background-image:none;-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1);border-bottom:1px solid #d4d4d4}#topbar-second .dropdown-menu{padding-top:0;padding-bottom:0}#topbar-second .dropdown-menu .divider{margin:0}#topbar-second #space-menu-dropdown,#topbar-second #search-menu-dropdown{width:400px}#topbar-second #space-menu-dropdown .media-list,#topbar-second #search-menu-dropdown .media-list{max-height:400px;overflow:auto}@media screen and (max-width:768px){#topbar-second #space-menu-dropdown .media-list,#topbar-second #search-menu-dropdown .media-list{max-height:200px}}#topbar-second #space-menu-dropdown form,#topbar-second #search-menu-dropdown form{margin:10px}#topbar-second #space-menu-dropdown .search-reset,#topbar-second #search-menu-dropdown .search-reset{position:absolute;color:#BFBFBF;margin:7px;top:0px;right:40px;z-index:10;display:none;cursor:pointer}#topbar-second .nav>li>a{padding:7px 13px 0;text-decoration:none;text-shadow:none;font-weight:600;font-size:10px;min-height:50px;text-transform:uppercase;text-align:center}#topbar-second .nav>li>a:hover,#topbar-second .nav>li>a:active,#topbar-second .nav>li>a:focus{border-bottom:3px solid #6fdbe8;background-color:#f7f7f7;color:#555;text-decoration:none}#topbar-second .nav>li>a i{font-size:14px}#topbar-second .nav>li>a .caret{border-top-color:#7a7a7a}#topbar-second .nav>li.active>a{min-height:47px}#topbar-second .nav>li>ul>li>a{border-left:3px solid #fff;background-color:#fff;color:#555}#topbar-second .nav>li>ul>li>a:hover,#topbar-second .nav>li>ul>li>a.active{border-left:3px solid #6fdbe8;background-color:#f7f7f7;color:#555}#topbar-second .nav>li>a#space-menu{padding-right:13px;border-right:1px solid #ededed}#topbar-second .nav>li>a#search-menu{padding-top:15px}#topbar-second .nav>li>a:hover,#topbar-second .nav .open>a,#topbar-second .nav>li.active{border-bottom:3px solid #6fdbe8;background-color:#f7f7f7;color:#555}#topbar-second .nav>li.active>a:hover{border-bottom:none}#topbar-second #space-menu-dropdown li>ul>li>a>.media .media-body p{color:#bebebe;font-size:11px;margin:0;font-weight:400}@media (max-width:767px){.topbar{padding-left:0;padding-right:0}}.login-container{background-color:#708fa0;background-image:linear-gradient(to right, #708fa0 0%, #8fa7b4 50%, #8fa7b4 100%),linear-gradient(to right, #7f9baa 0%, #bdcbd3 51%, #adbfc9 100%);background-size:100% 100%;position:relative;padding-top:40px}.login-container .text{color:#fff;font-size:12px;margin-bottom:15px}.login-container .text a{color:#fff;text-decoration:underline}.login-container .panel a{color:#6fdbe8}.login-container h1,.login-container h2{color:#fff !important}.login-container .panel{box-shadow:0 0 15px #627d92;-moz-box-shadow:0 0 15px #627d92;-webkit-box-shadow:0 0 15px #627d92}.login-container .panel .panel-heading,.login-container .panel .panel-body{padding:15px}.login-container select{color:#555}#account-login-form .form-group{margin-bottom:10px}.dropdown-menu li a{font-size:13px !important;font-weight:600 !important}.dropdown-menu li a i{margin-right:5px;font-size:14px;display:inline-block;width:14px}.dropdown-menu li a:hover,.dropdown-menu li a:visited,.dropdown-menu li a:hover,.dropdown-menu li a:focus{background:none;cursor:pointer}.dropdown-menu li:hover,.dropdown-menu li.selected{color:#555}.dropdown-menu li:first-child{margin-top:3px}.dropdown-menu li:last-child{margin-bottom:3px}.modal .dropdown-menu,.panel .dropdown-menu,.nav-tabs .dropdown-menu{border:1px solid #d7d7d7}.modal .dropdown-menu li.divider,.panel .dropdown-menu li.divider,.nav-tabs .dropdown-menu li.divider{background-color:#f7f7f7;border-bottom:none;margin:9px 1px !important}.modal .dropdown-menu li,.panel .dropdown-menu li,.nav-tabs .dropdown-menu li{border-left:3px solid white}.modal .dropdown-menu li a,.panel .dropdown-menu li a,.nav-tabs .dropdown-menu li a{color:#555;font-size:14px;font-weight:400;padding:4px 15px}.modal .dropdown-menu li a i,.panel .dropdown-menu li a i,.nav-tabs .dropdown-menu li a i{margin-right:5px}.modal .dropdown-menu li a:hover,.panel .dropdown-menu li a:hover,.nav-tabs .dropdown-menu li a:hover{background:none}.modal .dropdown-menu li:hover,.panel .dropdown-menu li:hover,.nav-tabs .dropdown-menu li:hover,.modal .dropdown-menu li.selected,.panel .dropdown-menu li.selected,.nav-tabs .dropdown-menu li.selected{border-left:3px solid #6fdbe8;background-color:#f7f7f7 !important}ul.contextMenu{border:1px solid #d7d7d7}ul.contextMenu li.divider{background-color:#f7f7f7;border-bottom:none;margin:9px 1px !important}ul.contextMenu li{border-left:3px solid white}ul.contextMenu li a{color:#555;font-size:14px;font-weight:400;padding:4px 15px}ul.contextMenu li a i{margin-right:5px}ul.contextMenu li a:hover{background:none}ul.contextMenu li:hover,ul.contextMenu li.selected{border-left:3px solid #6fdbe8;background-color:#f7f7f7 !important}.media-list li{padding:10px;border-bottom:1px solid #eee;position:relative;border-left:3px solid white;font-size:12px}.media-list li a{color:#555}.media-list .badge-space-type{background-color:#f7f7f7;border:1px solid #d7d7d7;color:#b2b2b2;padding:3px 3px 2px 3px}.media-list li.new{border-left:3px solid #f3fcfd;background-color:#f3fcfd}.media-list li:hover,.media-list li.selected{background-color:#f7f7f7;border-left:3px solid #6fdbe8}.media-list li.placeholder{font-size:14px !important;border-bottom:none}.media-list li.placeholder:hover{background:none !important;border-left:3px solid white}.media-left,.media>.pull-left{padding-right:0;margin-right:10px}.media:after{content:'';clear:both;display:block}.media .time{font-size:11px;color:#bebebe}.media .img-space{position:absolute;top:35px;left:35px}.media .media-body{font-size:13px}.media .media-body h4.media-heading{font-size:14px;font-weight:500;color:#555}.media .media-body h4.media-heading a{color:#555}.media .media-body h4.media-heading small,.media .media-body h4.media-heading small a{font-size:11px;color:#bebebe}.media .media-body h4.media-heading .content{margin-right:35px}.media .media-body .content a{word-break:break-all}.media .media-body h5{color:#aeaeae;font-weight:300;margin-top:5px;margin-bottom:5px;min-height:15px}.media .media-body .module-controls{font-size:85%}.media .media-body .module-controls a{color:#6fdbe8}.media .content a{color:#6fdbe8}.media .content .files a{color:#555}.content span{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.panel{border:none;background-color:#fff;box-shadow:0 0 3px #dadada;-webkit-box-shadow:0 0 3px #dadada;-moz-box-shadow:0 0 3px #dadada;border-radius:4px;position:relative;margin-bottom:15px}.panel h1{font-size:16px;font-weight:300;margin-top:0;color:#555}.panel .panel-heading{font-size:16px;font-weight:300;color:#555;background-color:white;border:none;padding:10px;border-radius:4px}.panel .panel-heading .heading-link{color:#6fdbe8 !important;font-size:0.8em}.panel .panel-body{padding:10px;font-size:13px}.panel .panel-body p{color:#555}.panel .statistics .entry{margin-left:20px;font-size:12px}.panel .statistics .entry .count{color:#6fdbe8;font-weight:600;font-size:20px;line-height:0.8em}.panel h3.media-heading small{font-size:75%}.panel h3.media-heading small a{color:#6fdbe8}.panel-danger{border:2px solid #ff8989}.panel-danger .panel-heading{color:#ff8989}.panel-success{border:2px solid #97d271}.panel-success .panel-heading{color:#97d271}.panel-warning{border:2px solid #fdd198}.panel-warning .panel-heading{color:#fdd198}.panel.profile{position:relative}.panel.profile .controls{position:absolute;top:10px;right:10px}.panel.members .panel-body a img,.panel.groups .panel-body a img,.panel.follower .panel-body a img,.panel.spaces .panel-body a img{margin-bottom:5px}.panel-profile .panel-profile-header{position:relative;border:3px solid #fff;border-top-right-radius:3px;border-top-left-radius:3px}.panel-profile .panel-profile-header .img-profile-header-background{border-radius:3px;min-height:110px}.panel-profile .panel-profile-header .img-profile-data{position:absolute;height:100px;width:100%;bottom:0;left:0;padding-left:180px;padding-top:30px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;color:#fff;pointer-events:none;background:-moz-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0,0,0,0)), color-stop(1%, rgba(0,0,0,0)), color-stop(100%, rgba(0,0,0,0.38)));background:-webkit-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);background:-o-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);background:-ms-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);background:linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#94000000', GradientType=0)}.panel-profile .panel-profile-header .img-profile-data h1{font-size:30px;font-weight:100;margin-bottom:7px;color:#fff;max-width:600px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.panel-profile .panel-profile-header .img-profile-data h2{font-size:16px;font-weight:400;margin-top:0}.panel-profile .panel-profile-header .img-profile-data h1.space{font-size:30px;font-weight:700}.panel-profile .panel-profile-header .img-profile-data h2.space{font-size:13px;font-weight:300;max-width:600px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.panel-profile .panel-profile-header .profile-user-photo-container{position:absolute;bottom:-50px;left:15px}.panel-profile .panel-profile-header .profile-user-photo-container .profile-user-photo{border:3px solid #fff;border-radius:5px}.panel-profile .panel-profile-controls{padding-left:160px}.panel.pulse,.panel.fadeIn{-webkit-animation-duration:200ms;-moz-animation-duration:200ms;animation-duration:200ms}@media (max-width:767px){.panel-profile-controls{padding-left:0 !important;padding-top:50px}.panel-profile .panel-profile-header .img-profile-data h1{font-size:20px !important}}.panel-body>.tab-menu{margin-left:-10px;margin-right:-10px}.installer .logo{text-align:center}.installer h2{font-weight:100}.installer .panel{margin-top:50px}.installer .panel h3{margin-top:0}.installer .powered,.installer .powered a{color:#bac2c7 !important;margin-top:10px;font-size:12px}.installer .fa{width:18px}.installer .check-ok{color:#97d271}.installer .check-warning{color:#fdd198}.installer .check-error{color:#ff8989}.installer .prerequisites-list ul{list-style:none;padding-left:15px}.installer .prerequisites-list ul li{padding-bottom:5px}.pagination-container{text-align:center}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{background-color:#708fa0;border-color:#708fa0}.pagination>li>a,.pagination>li>span,.pagination>li>a:hover,.pagination>li>a:active,.pagination>li>a:focus{color:#555;cursor:pointer}.well-small{padding:10px;border-radius:3px}.well{border:none;box-shadow:none;background-color:#ededed;margin-bottom:1px}.well hr{margin:15px 0 10px;border-top:1px solid #d9d9d9}.well table>thead{font-size:11px}.tab-sub-menu{padding-left:10px}.tab-sub-menu li>a:hover,.tab-sub-menu li>a:focus{background-color:#f7f7f7;border-bottom-color:#ddd}.tab-sub-menu li.active>a{background-color:#fff;border-bottom-color:transparent}.tab-menu{padding-top:10px;background-color:#fff}.tab-menu .nav-tabs{padding-left:10px}.tab-menu .nav-tabs li>a{padding-top:12px;border-color:#ddd;border-bottom:1px solid #ddd;background-color:#f7f7f7;max-height:41px;outline:none}.tab-menu .nav-tabs li>a:hover,.tab-menu .nav-tabs li>a:focus{padding-top:10px;border-top:3px solid #ddd}.tab-menu .nav-tabs li>a:hover{background-color:#f7f7f7}.tab-menu .nav-tabs li.active>a,.tab-menu .nav-tabs li.active>a:hover{padding-top:10px;border-top:3px solid #6fdbe8}.tab-menu .nav-tabs li.active>a{background-color:#fff;border-bottom-color:transparent}ul.tab-menu{padding-top:10px;background-color:#fff;padding-left:10px}ul.tab-menu-settings li>a{padding-top:12px;border-color:#ddd;border-bottom:1px solid #ddd;background-color:#f7f7f7;max-height:41px;outline:none}ul.tab-menu-settings li>a:hover,ul.tab-menu-settings li>a:focus{padding-top:10px;border-top:3px solid #ddd !important}ul.tab-menu-settings li>a:hover{background-color:#f7f7f7}ul.tab-menu-settings li.active>a,ul.tab-menu-settings li.active>a:hover,ul.tab-menu-settings li.active>a:focus{padding-top:10px;border-top:3px solid #6fdbe8 !important}ul.tab-menu-settings li.active>a{background-color:#fff;border-bottom-color:transparent !important}.nav-pills .dropdown-menu,.nav-tabs .dropdown-menu,.account .dropdown-menu{background-color:#708fa0;border:none}.nav-pills .dropdown-menu li.divider,.nav-tabs .dropdown-menu li.divider,.account .dropdown-menu li.divider{background-color:#628394;border-bottom:none;margin:9px 1px !important}.nav-pills .dropdown-menu li,.nav-tabs .dropdown-menu li,.account .dropdown-menu li{border-left:3px solid #708fa0}.nav-pills .dropdown-menu li a,.nav-tabs .dropdown-menu li a,.account .dropdown-menu li a{color:white;font-weight:400;font-size:13px;padding:4px 15px}.nav-pills .dropdown-menu li a i,.nav-tabs .dropdown-menu li a i,.account .dropdown-menu li a i{margin-right:5px;font-size:14px;display:inline-block;width:14px}.nav-pills .dropdown-menu li a:hover,.nav-tabs .dropdown-menu li a:hover,.account .dropdown-menu li a:hover,.nav-pills .dropdown-menu li a:visited,.nav-tabs .dropdown-menu li a:visited,.account .dropdown-menu li a:visited,.nav-pills .dropdown-menu li a:hover,.nav-tabs .dropdown-menu li a:hover,.account .dropdown-menu li a:hover,.nav-pills .dropdown-menu li a:focus,.nav-tabs .dropdown-menu li a:focus,.account .dropdown-menu li a:focus{background:none}.nav-pills .dropdown-menu li:hover,.nav-tabs .dropdown-menu li:hover,.account .dropdown-menu li:hover,.nav-pills .dropdown-menu li.selected,.nav-tabs .dropdown-menu li.selected,.account .dropdown-menu li.selected{border-left:3px solid #6fdbe8;color:#fff !important;background-color:#628394 !important}.nav-pills.preferences .dropdown .dropdown-toggle{color:#bebebe}.nav-pills.preferences .dropdown.open .dropdown-toggle,.nav-pills.preferences .dropdown.open .dropdown-toggle:hover{background-color:#708fa0}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{background-color:#708fa0}.nav-tabs{margin-bottom:10px}.list-group a [class^="fa-"],.list-group a [class*=" fa-"]{display:inline-block;width:18px}.nav-pills.preferences{position:absolute;right:10px;top:10px}.nav-pills.preferences .dropdown .dropdown-toggle{padding:2px 10px}.nav-pills.preferences .dropdown.open .dropdown-toggle,.nav-pills.preferences .dropdown.open .dropdown-toggle:hover{color:white}.nav-tabs li{font-weight:600;font-size:12px}.tab-content .tab-pane a{color:#6fdbe8}.tab-content .tab-pane .form-group{margin-bottom:5px}.nav-tabs.tabs-center li{float:none;display:inline-block}.nav-tabs.tabs-small li>a{padding:5px 7px}.nav .caret,.nav .caret:hover,.nav .caret:active{border-top-color:#555;border-bottom-color:#555;height:6.928px}.nav li.dropdown>a:hover .caret,.nav li.dropdown>a:active .caret{border-top-color:#555;border-bottom-color:#555}.nav .open>a .caret,.nav .open>a:hover .caret,.nav .open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{border-color:#ededed;color:#555}.nav .open>a .caret,.nav .open>a:hover .caret,.nav .open>a:focus .caret{color:#555}.footer-nav{filter:opacity(.6);font-size:12px;text-align:center}@media (max-width:991px){.controls-header{text-align:left !important}}.btn{float:none;border:none;-webkit-box-shadow:none;box-shadow:none;-moz-box-shadow:none;background-image:none;text-shadow:none;border-radius:3px;outline:none !important;margin-bottom:0;font-size:14px;font-weight:600;padding:8px 16px}.input.btn{outline:none}.btn-lg{padding:16px 28px}.btn-sm{padding:4px 8px;font-size:12px}.btn-sm i{font-size:14px}.btn-xs{padding:1px 5px;font-size:12px}.btn-default{background:#ededed;color:#7a7a7a !important}.btn-default:hover,.btn-default:focus{background:#e8e8e8;text-decoration:none;color:#7a7a7a}.btn-default:active,.btn-default.active{outline:0;background:#e0e0e0}.btn-default[disabled],.btn-default.disabled{background:#f2f2f2}.btn-default[disabled]:hover,.btn-default.disabled:hover,.btn-default[disabled]:focus,.btn-default.disabled:focus{background:#f2f2f2}.btn-default[disabled]:active,.btn-default.disabled:active,.btn-default[disabled].active,.btn-default.disabled.active{background:#f2f2f2}.btn-primary{background:#708fa0;color:#fff !important}.btn-primary:hover,.btn-primary:focus{background:#628394;text-decoration:none}.btn-primary:active,.btn-primary.active{outline:0;background:#628394 !important}.btn-primary[disabled],.btn-primary.disabled{background:#7f9baa}.btn-primary[disabled]:hover,.btn-primary.disabled:hover,.btn-primary[disabled]:focus,.btn-primary.disabled:focus{background:#7f9baa}.btn-primary[disabled]:active,.btn-primary.disabled:active,.btn-primary[disabled].active,.btn-primary.disabled.active{background:#7f9baa !important}.btn-info{background:#6fdbe8;color:#fff !important}.btn-info:hover,.btn-info:focus{background:#59d6e4 !important;text-decoration:none}.btn-info:active,.btn-info.active{outline:0;background:#59d6e4}.btn-info[disabled],.btn-info.disabled{background:#85e0ec}.btn-info[disabled]:hover,.btn-info.disabled:hover,.btn-info[disabled]:focus,.btn-info.disabled:focus{background:#85e0ec}.btn-info[disabled]:active,.btn-info.disabled:active,.btn-info[disabled].active,.btn-info.disabled.active{background:#85e0ec !important}.btn-danger{background:#ff8989;color:#fff !important}.btn-danger:hover,.btn-danger:focus{background:#ff6f6f;text-decoration:none}.btn-danger:active,.btn-danger.active{outline:0;background:#ff6f6f !important}.btn-danger[disabled],.btn-danger.disabled{background:#ffa3a3}.btn-danger[disabled]:hover,.btn-danger.disabled:hover,.btn-danger[disabled]:focus,.btn-danger.disabled:focus{background:#ffa3a3}.btn-danger[disabled]:active,.btn-danger.disabled:active,.btn-danger[disabled].active,.btn-danger.disabled.active{background:#ffa3a3 !important}.btn-success{background:#97d271;color:#fff !important}.btn-success:hover,.btn-success:focus{background:#89cc5e;text-decoration:none}.btn-success:active,.btn-success.active{outline:0;background:#89cc5e !important}.btn-success[disabled],.btn-success.disabled{background:#a5d884}.btn-success[disabled]:hover,.btn-success.disabled:hover,.btn-success[disabled]:focus,.btn-success.disabled:focus{background:#a5d884}.btn-success[disabled]:active,.btn-success.disabled:active,.btn-success[disabled].active,.btn-success.disabled.active{background:#a5d884 !important}.btn-warning{background:#fdd198;color:#fff !important}.btn-warning:hover,.btn-warning:focus{background:#fdcd8e;text-decoration:none}.btn-warning:active,.btn-warning.active{outline:0;background:#fdcd8e !important}.btn-warning[disabled],.btn-warning.disabled{background:#fddcb1}.btn-warning[disabled]:hover,.btn-warning.disabled:hover,.btn-warning[disabled]:focus,.btn-warning.disabled:focus{background:#fddcb1}.btn-warning[disabled]:active,.btn-warning.disabled:active,.btn-warning[disabled].active,.btn-warning.disabled.active{background:#fddcb1 !important}.radio,.checkbox{margin-top:5px !important;margin-bottom:0}.radio label,.checkbox label{padding-left:10px}.form-control{border:2px solid #ededed;box-shadow:none;min-height:35px}.form-control:focus{border:2px solid #6fdbe8;outline:0;box-shadow:none}.form-control.form-search{border-radius:30px;background-image:url("../img/icon_search16x16.png");background-repeat:no-repeat;background-position:10px 8px;padding-left:34px}.form-group-search{position:relative}.form-group-search .form-button-search{position:absolute;top:4px;right:4px;border-radius:30px}textarea{resize:none;height:1.5em}select.form-control:not([multiple]){-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("../img/select_arrow.png") !important;background-repeat:no-repeat;background-position:right 13px;overflow:hidden}label{font-weight:normal}label.control-label{font-weight:bold}::-webkit-input-placeholder{color:#bebebe !important}::-moz-placeholder{color:#bebebe !important}:-ms-input-placeholder{color:#bebebe !important}input:-moz-placeholder{color:#bebebe !important}.placeholder{padding:10px}input.placeholder,textarea.placeholder{padding:0 0 0 10px;color:#999}.help-block-error{font-size:12px}.hint-block,.help-block:not(.help-block-error){color:#aeaeae !important;font-size:12px}.hint-block:hover,.help-block:not(.help-block-error):hover{color:#7a7a7a !important;font-size:12px}.input-group-addon{border:none}a.input-field-addon{font-size:12px;float:right;margin-top:-10px}a.input-field-addon-sm{font-size:11px;float:right;margin-top:-10px}.timeZoneInputContainer{padding-top:10px}.timeZoneInputContainer~.help-block{margin:0px}.label{text-transform:uppercase}.label{text-transform:uppercase;display:inline-block;padding:3px 5px 4px;font-weight:600;font-size:10px !important;color:white !important;vertical-align:baseline;white-space:nowrap;text-shadow:none}.label-default{background:#ededed;color:#7a7a7a !important}a.label-default:hover{background:#e0e0e0 !important}.label-info{background-color:#6fdbe8}a.label-info:hover{background:#59d6e4 !important}.label-danger{background-color:#ff8989}a.label-danger:hover{background:#ff6f6f !important}.label-success{background-color:#97d271}a.label-success:hover{background:#89cc5e !important}.label-warning{background-color:#fdd198}a.label-warning:hover{background:#fdc67f !important}.regular-checkbox:checked+.regular-checkbox-box{border:2px solid #6fdbe8;background:#6fdbe8;color:white}.regular-checkbox-box.disabled{background:#d7d7d7 !important;border:2px solid #d7d7d7 !important;cursor:not-allowed}.regular-radio:checked+.regular-radio-button:after{background:#6fdbe8}.regular-radio:checked+.regular-radio-button{background-color:none;color:#99a1a7;border:2px solid #d7d7d7;margin-right:5px}.regular-radio.disabled{background:#d7d7d7 !important;border:2px solid #d7d7d7 !important;cursor:not-allowed}.errorMessage{color:#ff8989;padding:10px 0}.error{border-color:#ff8989 !important}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#ff8989 !important}.has-error .form-control,.has-error .form-control:focus{border-color:#ff8989;-webkit-box-shadow:none;box-shadow:none}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#97d271}.has-success .form-control,.has-success .form-control:focus{border-color:#97d271;-webkit-box-shadow:none;box-shadow:none}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#fdd198}.has-warning .form-control,.has-warning .form-control:focus{border-color:#fdd198;-webkit-box-shadow:none;box-shadow:none}.bootstrap-timepicker-widget .form-control{padding:0px}#notification_overview_filter label{display:block}#notification_overview_list .img-space{position:absolute;top:25px;left:25px}@media (max-width:767px){.notifications{position:inherit !important;float:left !important}.notifications .dropdown-menu{width:300px !important;margin-left:0 !important}.notifications .dropdown-menu .arrow{margin-left:-142px !important}}.badge-space{margin-top:6px}.badge-space-chooser{padding:3px 5px;margin-left:1px}.badge{padding:3px 5px;border-radius:2px;font-weight:normal;font-family:Arial,sans-serif;font-size:10px !important;text-transform:uppercase;color:#fff;vertical-align:baseline;white-space:nowrap;text-shadow:none;background-color:#d7d7d7;line-height:1}.popover{border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);-moz-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175)}.popover .popover-title{background:none;border-bottom:none;color:#555;font-weight:300;font-size:16px;padding:15px}.popover .popover-content{font-size:13px;padding:5px 15px;color:#555}.popover .popover-content a{color:#6fdbe8}.popover .popover-content img{max-width:100%}.popover .popover-navigation{padding:15px}.list-group-item{padding:6px 15px;border:none;border-width:0 !important;border-left:3px solid #fff !important;font-size:12px;font-weight:600}.list-group-item i{font-size:14px}a.list-group-item:hover,a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#555;background-color:#f7f7f7;border-left:3px solid #6fdbe8 !important}@media (max-width:991px){.list-group{margin-left:4px}.list-group-item{display:inline-block !important;border-radius:3px !important;margin:4px 0;margin-bottom:4px !important}.list-group-item{border:none !important}a.list-group-item:hover,a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{border:none !important;background:#708fa0 !important;color:#fff !important}}@media screen and (max-width:768px){.modal-dialog{width:auto !important;padding-top:30px;padding-bottom:30px}}.modal-top{z-index:999999 !important}.modal{overflow-y:visible}.modal-dialog-extra-small{width:400px}.modal-dialog-small{width:500px}.modal-dialog-normal{width:600px}.modal-dialog-medium{width:768px}.modal-dialog-large{width:900px}@media screen and (max-width:920px){.modal-dialog-large{width:auto !important;padding-top:30px;padding-bottom:30px}}.modal{border:none}.modal h1,.modal h2,.modal h3,.modal h4,.modal h5{margin-top:20px;color:#555;font-weight:300}.modal h4.media-heading{margin-top:0}.modal-title{font-size:20px;font-weight:200;color:#555}.modal-dialog,.modal-content{min-width:150px}.modal-content{-webkit-border-radius:3px;-moz-border-radius:3px;box-shadow:0 2px 26px rgba(0,0,0,0.3),0 0 0 1px rgba(0,0,0,0.1);-webkit-box-shadow:0 2px 26px rgba(0,0,0,0.3),0 0 0 1px rgba(0,0,0,0.1);-moz-box-shadow:0 2px 26px rgba(0,0,0,0.3),0 0 0 1px rgba(0,0,0,0.1);border:none}.modal-content .modal-header{padding:20px 20px 0;border-bottom:none;text-align:center}.modal-content .modal-header .close{margin-top:2px;margin-right:5px}.modal-content .modal-body{padding:20px;font-size:13px}.modal-content .modal-footer{margin-top:0;text-align:left;padding:10px 20px 30px;border-top:none;text-align:center}.modal-content .modal-footer hr{margin-top:0}.modal-backdrop{background-color:rgba(0,0,0,0.5)}.modal-dialog.fadeIn,.modal-dialog.pulse{-webkit-animation-duration:200ms;-moz-animation-duration:200ms;animation-duration:200ms}.module-installed{opacity:0.5}.module-installed .label-success{background-color:#d7d7d7}.tooltip-inner{background-color:#708fa0;max-width:400px;text-align:left;font-weight:300;padding:2px 8px 4px;font-weight:bold;white-space:pre-wrap}.tooltip.top .tooltip-arrow{border-top-color:#708fa0}.tooltip.top-left .tooltip-arrow{border-top-color:#708fa0}.tooltip.top-right .tooltip-arrow{border-top-color:#708fa0}.tooltip.right .tooltip-arrow{border-right-color:#708fa0}.tooltip.left .tooltip-arrow{border-left-color:#708fa0}.tooltip.bottom .tooltip-arrow{border-bottom-color:#708fa0}.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#708fa0}.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#708fa0}.tooltip.in{opacity:1;filter:alpha(opacity=100)}.progress{height:10px;margin-bottom:15px;box-shadow:none;background:#ededed;border-radius:10px}.progress-bar-info{background-color:#6fdbe8;-webkit-box-shadow:none;box-shadow:none}#nprogress .bar{height:2px;background:#6fdbe8}table{margin-bottom:0px !important}table th{font-size:11px;color:#bebebe;font-weight:normal}table thead tr th{border:none !important}table .time{font-size:12px}table td a:hover{color:#6fdbe8}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:10px 10px 10px 0}.table>thead>tr>th select,.table>tbody>tr>th select,.table>tfoot>tr>th select,.table>thead>tr>td select,.table>tbody>tr>td select,.table>tfoot>tr>td select{font-size:12px;padding:4px 8px;height:30px;margin:0}.table-middle>thead>tr>th,.table-middle>tbody>tr>th,.table-middle>tfoot>tr>th,.table-middle>thead>tr>td,.table-middle>tbody>tr>td,.table-middle>tfoot>tr>td{vertical-align:middle !important}.comment-container{margin-top:10px}.comment-container .wall-entry-controls{margin-left:50px}.comment .media{position:relative !important;margin-top:0}.comment .media .nav-pills.preferences{display:none;right:-3px;top:-3px}.comment .media-body{overflow:visible}.comment .jp-progress{background-color:#dbdcdd !important}.comment .jp-play-bar{background:#cacaca}.comment .content a{color:#21bdd0}.comment.guest-mode .media:last-child .wall-entry-controls{margin-bottom:0;margin-left:50px}.comment.guest-mode .media:last-child hr{display:none}.comment_create,.content_edit{position:relative}.comment_create .comment-buttons,.content_edit .comment-buttons{position:absolute;bottom:2px;right:5px}.comment_create .btn-comment-submit,.content_edit .btn-comment-submit{margin-top:3px}.comment_create .fileinput-button,.content_edit .fileinput-button{float:left;padding:6px 10px;background:transparent !important}.comment_create .fileinput-button .fa,.content_edit .fileinput-button .fa{color:#d7d7d7}.comment_create .fileinput-button:hover .fa,.content_edit .fileinput-button:hover .fa{background:transparent !important;color:#b2b2b2}.comment_create .fileinput-button:active,.content_edit .fileinput-button:active{box-shadow:none !important}.post-richtext-input-group{position:relative}.post-richtext-input-group .comment-buttons{bottom:7px !important}.comment-container .content_edit{margin-left:50px}.comment_edit_content{margin-left:50px}.comment-message{overflow:hidden;overflow-wrap:break-word}.comment-create-input-group{position:relative}.comment-create-input-group .ProsemirrorEditor .ProseMirror{padding-right:72px}.comment-create-input-group.scrollActive .comment-buttons{right:22px}.grid-view img{width:24px;height:24px}.grid-view .filters input,.grid-view .filters select{border:2px solid #ededed;box-shadow:none;min-height:35px;border-radius:4px;font-size:12px;padding:4px}.grid-view .filters input:focus,.grid-view .filters select:focus{border:2px solid #6fdbe8;outline:0;box-shadow:none}.grid-view{padding:15px 0 0}.grid-view img{border-radius:3px}.grid-view table th{font-size:13px !important;font-weight:bold !important}.grid-view table td{vertical-align:middle !important}.grid-view table tr{font-size:13px !important}.grid-view table thead tr th:first-of-type{padding-left:5px}.grid-view table tbody tr{height:50px}.grid-view table tbody tr td:first-of-type{padding-left:5px}.grid-view .summary{font-size:12px;color:#bac2c7}.permission-grid-editor>.table>tbody>tr:first-child>td{border:none}.permission-grid-editor{padding-top:0px}.detail-view td,.detail-view th{padding:8px !important}.detail-view th{font-size:13px}.oembed_snippet{margin-top:10px;position:relative;padding-bottom:55%;padding-top:15px;height:0;overflow:hidden}.oembed_snippet iframe{position:absolute;top:0;left:0;width:100%;height:100%}.activities{max-height:400px;overflow:auto}.activities li .media{position:relative}.activities li .media .img-space{position:absolute;top:14px;left:14px}.activities li .media .media-body{max-width:295px}.contentForm_options{margin-top:10px;min-height:29px}.contentForm_options .btn_container{position:relative}.contentForm_options .btn_container .label-public{position:absolute;right:40px;top:11px}#content-topic-bar{margin-top:5px;text-align:right}#content-topic-bar .label{margin-left:4px}#contentFormError{color:#ff8989;padding-left:0;list-style:none}.placeholder-empty-stream{background-image:url("../img/placeholder-postform-arrow.png");background-repeat:no-repeat;padding:37px 0 0 70px;margin-left:90px}.wall-entry{position:relative}.wall-entry .content p,.wall-entry .content a{overflow:hidden;text-overflow:ellipsis;max-width:100%}.wall-entry .content img{max-width:100%}.wall-entry .media{overflow:visible}.wall-entry .well{margin-bottom:0}.wall-entry .well .comment .show-all-link{font-size:12px;cursor:pointer}.wall-entry .media-heading{font-size:14px;padding-top:1px;margin-bottom:3px}.wall-entry .media-heading .labels{padding-right:32px}.wall-entry .media-heading .viaLink{font-size:13px}.wall-entry .media-heading .viaLink i{color:#bebebe;padding-left:4px;padding-right:4px}.wall-entry .media-subheading{color:#bebebe;font-size:12px}.wall-entry .media-subheading .time{font-size:12px;white-space:nowrap}.wall-entry-controls,.wall-entry-controls a{font-size:11px;font-weight:700;color:#7a7a7a;margin-top:10px;margin-bottom:0}#wall-stream-filter-nav{font-size:12px;margin-bottom:10px;padding-top:2px;border-radius:0 0 4px 4px}#wall-stream-filter-nav .wall-stream-filter-root{margin:0;border:0 !important}#wall-stream-filter-nav .filter-panel{padding:0 10px}#wall-stream-filter-nav .wall-stream-filter-head{padding:5px 5px 10px 5px;border-bottom:1px solid #ddd}#wall-stream-filter-nav .wall-stream-filter-body{overflow:hidden;background-color:#f7f7f7;border:1px solid #ddd;border-top:0;border-radius:0 0 4px 4px}#wall-stream-filter-nav hr{margin:5px 0 0 0}#wall-stream-filter-nav .topic-remove-label{float:left}#wall-stream-filter-nav .topic-remove-label,#wall-stream-filter-nav .content-type-remove-label{margin-right:6px}#wall-stream-filter-nav .select2{width:260px !important;margin-bottom:5px;margin-top:2px}#wall-stream-filter-nav .select2 .select2-search__field{height:25px !important}#wall-stream-filter-nav .select2 .select2-selection__choice{height:23px !important}#wall-stream-filter-nav .select2 .select2-selection__choice span,#wall-stream-filter-nav .select2 .select2-selection__choice i{line-height:19px !important}#wall-stream-filter-nav .select2 .select2-selection__choice .img-rounded{width:18px !important;height:18px !important}#wall-stream-filter-nav .wall-stream-filter-bar{display:inline;float:right;white-space:normal}#wall-stream-filter-nav .wall-stream-filter-bar .label{height:18px;padding-top:4px}#wall-stream-filter-nav .wall-stream-filter-bar .btn,#wall-stream-filter-nav .wall-stream-filter-bar .label{box-shadow:0 0 2px #7a7a7a;-webkit-box-shadow:0 0 2px #7a7a7a;-moz-box-shadow:0 0 2px #7a7a7a}@media (max-width:767px){#wall-stream-filter-nav .wall-stream-filter-root{white-space:nowrap}#wall-stream-filter-nav .wall-stream-filter-body{overflow:auto}}.filter-root{margin:15px}.filter-root .row{display:table !important}.filter-root .filter-panel{padding:0 5px;display:table-cell !important;float:none}.filter-root .filter-panel .filter-block strong{margin-bottom:5px}.filter-root .filter-panel .filter-block ul.filter-list{list-style:none;padding:0;margin:0 0 5px}.filter-root .filter-panel .filter-block ul.filter-list li{font-size:12px;padding:2px}.filter-root .filter-panel .filter-block ul.filter-list li a{color:#555}.filter-root .filter-panel div.filter-block:last-of-type ul.filter-list{margin:0px}.filter-root .filter-panel+.filter-panel{border-left:2px solid #ededed}.stream-entry-loader{float:right;margin-top:5px}.load-suppressed{margin-top:-17px;margin-bottom:15px;text-align:center}.load-suppressed a{display:inline-block;background-color:white;padding:5px;border-radius:0 0 4px 4px;border:1px solid #ddd;font-size:11px}.space-owner{text-align:center;margin:14px 0;font-size:13px;color:#999}.space-member-sign{color:#97d271;position:absolute;top:42px;left:42px;font-size:16px;background:#fff;width:24px;height:24px;padding:2px 3px 1px 4px;border-radius:50px;border:2px solid #97d271}#space-menu-dropdown i.type{font-size:16px;color:#BFBFBF}#space-menu-spaces [data-space-chooser-item]{cursor:pointer}#space-menu-dropdown .input-group-addon{border-radius:0px 4px 4px 0px}#space-menu-dropdown .input-group-addon.focus{border-radius:0px 4px 4px 0px;border:2px solid #6fdbe8;border-left:0px}#space-menu-search{border-right:0px}#space-directory-link i{margin-right:0px}.space-acronym{color:#fff;text-align:center;display:inline-block}.current-space-image{margin-right:3px;margin-top:3px}@media (max-width:767px){#space-menu>.title{display:none}#space-menu-dropdown{width:300px !important}}.files,#postFormFiles_list{padding-left:0}.contentForm-upload-list{padding-left:0}.contentForm-upload-list li:first-child{margin-top:10px}.file_upload_remove_link,.file_upload_remove_link:hover{color:#ff8989;cursor:pointer}.file-preview-item{text-overflow:ellipsis;overflow:hidden}.post-files{margin-top:10px}.post-files img{vertical-align:top;margin-bottom:3px;margin-right:5px;max-height:100%;-webkit-animation-duration:2s;animation-duration:2s}#wallStream.mobile .post-files{margin-top:10px;display:flex;overflow-x:auto}#wallStream.mobile .post-files img{max-width:190px}.file-preview-content{cursor:pointer}.image-upload-container{position:relative}.image-upload-container .image-upload-buttons{display:none;position:absolute;right:5px;bottom:5px}.image-upload-container input[type="file"]{position:absolute;opacity:0}.image-upload-container .image-upload-loader{display:none;position:absolute;top:0;left:0;width:100%;height:100%;padding:20px;background:#f8f8f8}.mime{background-repeat:no-repeat;background-position:0 0;padding:1px 0 4px 26px}.mime-word{background-image:url("../img/mime/word.png")}.mime-excel{background-image:url("../img/mime/excel.png")}.mime-powerpoint{background-image:url("../img/mime/powerpoint.png")}.mime-pdf{background-image:url("../img/mime/pdf.png")}.mime-zip{background-image:url("../img/mime/zip.png")}.mime-image{background-image:url("../img/mime/image.png")}.mime-file{background-image:url("../img/mime/file.png")}.mime-photoshop{background-image:url("../img/mime/photoshop.png")}.mime-illustrator{background-image:url("../img/mime/illustrator.png")}.mime-video{background-image:url("../img/mime/video.png")}.mime-audio{background-image:url("../img/mime/audio.png")}ul.tour-list{list-style:none;margin-bottom:0;padding-left:10px}ul.tour-list li{padding-top:5px}ul.tour-list li a{color:#6fdbe8}ul.tour-list li a .fa{width:16px}ul.tour-list li.completed a{text-decoration:line-through;color:#bebebe}.atwho-view .cur{border-left:3px solid #6fdbe8;background-color:#f7f7f7 !important}.atwho-user,.atwho-space,.atwho-input a{color:#6fdbe8}.atwho-input a:hover{color:#6fdbe8}.atwho-view strong{background-color:#f9f0d2}.atwho-view .cur strong{background-color:#f9f0d2}.atwho-view span{padding:5px}.sk-spinner-three-bounce.sk-spinner{margin:0 auto;width:70px;text-align:center}.loader{padding:30px 0}.loader .sk-spinner-three-bounce div,.loader .sk-spinner-three-bounce span{width:12px;height:12px;background-color:#6fdbe8;border-radius:100%;display:inline-block;-webkit-animation:sk-threeBounceDelay 1.4s infinite ease-in-out;animation:sk-threeBounceDelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.loader .sk-spinner-three-bounce .sk-bounce1{-webkit-animation-delay:-0.32s;animation-delay:-0.32s}.loader .sk-spinner-three-bounce .sk-bounce2{-webkit-animation-delay:-0.16s;animation-delay:-0.16s}@-webkit-keyframes sk-threeBounceDelay{0%,80%,100%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes sk-threeBounceDelay{0%,80%,100%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.loader-modal{padding:8px 0}.loader-postform{padding:9px 0}.loader-postform .sk-spinner-three-bounce.sk-spinner{text-align:left;margin:0}.markdown-render h1,.markdown-render h2,.markdown-render h3,.markdown-render h4,.markdown-render h5,.markdown-render h6{font-weight:bold !important}.markdown-render h1{font-size:28px !important}.markdown-render h2{font-size:24px !important}.markdown-render h3{font-size:18px !important}.markdown-render h4{font-size:16px !important}.markdown-render h5{font-size:14px !important}.markdown-render h6{color:#999;font-size:14px !important}.markdown-render pre{padding:0;border:none;border-radius:3px}.markdown-render pre code{padding:10px;border-radius:3px;font-size:12px !important}.markdown-render a,.markdown-render a:visited{background-color:inherit;text-decoration:none;color:#6fdbe8 !important}.markdown-render a.header-anchor{color:#777 !important}.markdown-render img{max-width:100%}.markdown-render table{width:100%}.markdown-render table th{font-size:13px;font-weight:700;color:#555}.markdown-render table thead tr{border-bottom:1px solid #d7d7d7}.markdown-render table tbody tr td,.markdown-render table thead tr th{border:1px solid #d7d7d7 !important;padding:4px}.md-editor.active{border:2px solid #6fdbe8 !important}.md-editor textarea{padding:10px !important}[data-ui-markdown],[data-ui-richtext]{overflow:hidden;overflow-wrap:break-word}[data-ui-markdown] h1,[data-ui-richtext] h1,[data-ui-markdown] h2,[data-ui-richtext] h2,[data-ui-markdown] h3,[data-ui-richtext] h3,[data-ui-markdown] h4,[data-ui-richtext] h4,[data-ui-markdown] h5,[data-ui-richtext] h5,[data-ui-markdown] h6,[data-ui-richtext] h6{text-align:start;margin:0 0 0.5em}[data-ui-markdown] h1,[data-ui-richtext] h1{font-size:1.7em !important;font-weight:600}[data-ui-markdown] h2,[data-ui-richtext] h2{font-size:1.5em !important;font-weight:500}[data-ui-markdown] h3,[data-ui-richtext] h3{font-size:1.2em !important}[data-ui-markdown] h4,[data-ui-richtext] h4{font-size:1.1em !important}[data-ui-markdown] h5,[data-ui-richtext] h5{font-size:1em !important}[data-ui-markdown] h6,[data-ui-richtext] h6{font-size:.85em !important}[data-ui-markdown] p,[data-ui-richtext] p,[data-ui-markdown] pre,[data-ui-richtext] pre,[data-ui-markdown] blockquote,[data-ui-richtext] blockquote{margin:0 0 1.1em}[data-ui-markdown] p:last-child,[data-ui-richtext] p:last-child{margin:0}[data-ui-markdown] pre code.hljs,[data-ui-richtext] pre code.hljs{background-color:#f5f5f5}[data-ui-markdown] blockquote,[data-ui-richtext] blockquote{border-left-width:10px;background-color:rgba(128,128,128,0.05);border-top-right-radius:5px;border-bottom-right-radius:5px;padding:15px 20px;font-size:1em;border-left:5px solid #888888}[data-ui-markdown] table,[data-ui-richtext] table{width:100%}[data-ui-markdown] table th,[data-ui-richtext] table th{font-size:13px;font-weight:700;color:#555;background-color:#f7f7f7}[data-ui-markdown] table td,[data-ui-richtext] table td,[data-ui-markdown] table th,[data-ui-richtext] table th{border:1px solid #d7d7d7 !important;padding:6px}[data-ui-markdown] dt,[data-ui-richtext] dt,[data-ui-markdown] dd,[data-ui-richtext] dd{margin-top:5px;margin-bottom:5px;line-height:1.45}[data-ui-markdown] dt,[data-ui-richtext] dt{font-weight:bold}[data-ui-markdown] dd,[data-ui-richtext] dd{margin-left:40px}[data-ui-markdown] pre,[data-ui-richtext] pre{text-align:start;border:0;padding:10px 20px;border-radius:5px}[data-ui-markdown] pre code,[data-ui-richtext] pre code{white-space:pre !important}[data-ui-markdown] blockquote ul:last-child,[data-ui-richtext] blockquote ul:last-child,[data-ui-markdown] blockquote ol:last-child,[data-ui-richtext] blockquote ol:last-child{margin-bottom:0px}[data-ui-markdown] ul,[data-ui-richtext] ul,[data-ui-markdown] ol,[data-ui-richtext] ol{margin-top:0;margin-bottom:10.5px}[data-ui-markdown] ul li p,[data-ui-richtext] ul li p,[data-ui-markdown] ol li p,[data-ui-richtext] ol li p{overflow:visible !important}[data-ui-markdown] .footnote,[data-ui-richtext] .footnote{vertical-align:top;position:relative;top:-0.5em;font-size:.8em}[data-ui-markdown] .emoji,[data-ui-richtext] .emoji{width:16px}[data-ui-markdown] a.not-found,[data-ui-richtext] a.not-found{color:#fdd198}[data-ui-markdown] li,[data-ui-richtext] li{border:0 !important;background-color:transparent !important;padding:0}[data-ui-markdown] img,[data-ui-richtext] img{max-width:100%}blockquote{border-left:2px dotted #888;padding-left:5px;background:#d0f0ff}.wmd-panel{min-width:500px}.wmd-button-bar{width:100%;background-color:Silver}.wmd-input{height:300px;width:100%;background-color:Gainsboro;border:1px solid DarkGray}.wmd-button-row{position:relative;margin-left:5px;margin-right:5px;margin-bottom:5px;margin-top:10px;padding:0px;height:20px}.wmd-spacer{width:1px;height:20px;margin-left:14px;position:absolute;background-color:Silver;display:inline-block;list-style:none}.wmd-button{width:20px;height:20px;padding-left:2px;padding-right:3px;position:absolute;display:inline-block;list-style:none;cursor:pointer}.wmd-button>span{background-image:url(../img/wmd-buttons.png);background-repeat:no-repeat;background-position:0px 0px;width:20px;height:20px;display:inline-block}.wmd-spacer1{left:50px}.wmd-spacer2{left:175px}.wmd-spacer3{left:300px}.wmd-prompt-background{background-color:Black}.wmd-prompt-dialog{border:1px solid #999999;background-color:#F5F5F5}.wmd-prompt-dialog>div{font-size:0.8em;font-family:arial,helvetica,sans-serif}.wmd-prompt-dialog>form>input[type="text"]{border:1px solid #999999;color:black}.wmd-prompt-dialog>form>input[type="button"]{border:1px solid #888888;font-family:trebuchet MS,helvetica,sans-serif;font-size:0.8em;font-weight:bold}@media (max-width:991px){.layout-sidebar-container{display:none}}.ui-widget-header{border:none !important;background:#fff !important;color:#7a7a7a !important;font-weight:300 !important}.ui-widget-content{border:1px solid #dddcda !important;border-radius:0 !important;background:#fff;color:#555 !important;-webkit-box-shadow:0 6px 6px rgba(0,0,0,0.1);box-shadow:0 6px 6px rgba(0,0,0,0.1)}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{opacity:0.2}.ui-datepicker .ui-datepicker-prev:hover,.ui-datepicker .ui-datepicker-next:hover{background:#fff !important;border:none;margin:1px}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:none !important;background:#f7f7f7 !important;color:#7a7a7a !important}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:none !important;border:1px solid #b2b2b2 !important}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #6fdbe8 !important;background:#ddf6fa !important}.status-bar-body{color:white;position:fixed;width:100%;background-color:rgba(0,0,0,0.7);text-align:center;padding:20px;z-index:9999999;bottom:0px;display:block;line-height:20px}.status-bar-close{color:white;fonfont-weight:bold;font-size:21px;cursor:pointer}.status-bar-close:hover{color:white}.status-bar-close i{vertical-align:top !important;padding-top:3px}.status-bar-content i{margin-right:10px;font-size:21px;vertical-align:middle}.status-bar-content .showMore{color:#6fdbe8;float:right;margin-left:10px;font-size:0.7em;cursor:pointer;vertical-align:middle;white-space:nowrap}.status-bar-content .status-bar-details{text-align:left;font-size:0.7em;margin-top:20px;max-height:200px;overflow:auto}.status-bar-content span{vertical-align:middle}.status-bar-content i.error,.status-bar-content i.fatal{color:#ff8989}.status-bar-content i.warning{color:#fdd198}.status-bar-content i.info,.status-bar-content i.debug{color:#6fdbe8}.status-bar-content i.success{color:#85CA2B}.highlight{background-color:#fff8e0}.alert-default{color:#555;background-color:#f7f7f7;border-color:#ededed;font-size:13px}.alert-default .info{margin:10px 0}.alert-success{color:#84be5e;background-color:#f7fbf4;border-color:#97d271}.alert-warning{color:#e9b168;background-color:#fffbf7;border-color:#fdd198}.alert-danger{color:#ff8989;background-color:#fff6f6;border-color:#ff8989}.data-saved{padding-left:10px;color:#6fdbe8}img.bounceIn{-webkit-animation-duration:800ms;-moz-animation-duration:800ms;animation-duration:800ms}.tags .tag{margin-top:5px;border-radius:2px;padding:4px 8px;text-transform:uppercase;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ProsemirrorEditor.fullscreen{position:fixed;top:0;left:0;width:100%;height:100%;z-index:9998}.ProsemirrorEditor.fullscreen .ProseMirror-menubar-wrapper{height:100%}.ProsemirrorEditor.fullscreen .humhub-ui-richtext{max-height:none !important}.ProsemirrorEditor.fullscreen .ProseMirror{position:static;overflow:auto;heigh:100%;height:calc(100% - 26px);height:-o-calc(100% - 26px);height:-webkit-calc(100% - 26px)}.ProsemirrorEditor.fullscreen .ProseMirror-menubar{position:static !important;top:0 !important;left:0 !important;margin:0 !important;width:100% !important}.ProsemirrorEditor .ProseMirror{padding-right:12px}.ProsemirrorEditor .ProseMirror-menu{margin:0 -4px;line-height:1}.ProsemirrorEditor .ProseMirror-tooltip .ProseMirror-menu{width:-webkit-fit-content;width:fit-content;white-space:pre}.ProsemirrorEditor .ProseMirror-menuitem{margin-right:0;display:inline-block}.ProsemirrorEditor .ProseMirror-menuseparator{border-right:1px solid #ddd;margin-right:3px}.ProsemirrorEditor .ProseMirror-menuitem .ProseMirror-menu-group{border-right:1px solid #ddd}.ProsemirrorEditor .ProseMirror-menuitem .ProseMirror-menu-group.last{border-right:none}.ProsemirrorEditor .ProseMirror-menuitem .seperator{border-right:1px solid #ddd;margin-right:2px;padding-right:2px}.ProsemirrorEditor .ProseMirror-menu-dropdown,.ProsemirrorEditor .ProseMirror-menu-dropdown-menu{font-size:90%;white-space:nowrap}.ProsemirrorEditor .ProseMirror-menu-dropdown{cursor:pointer;position:relative;padding-right:15px !important}.ProsemirrorEditor .ProseMirror-menu-dropdown-wrap{padding:1px 0 1px 0;display:inline-block;position:relative}.ProsemirrorEditor .ProseMirror-menu-dropdown-right{right:0}.ProsemirrorEditor .ProseMirror-menu-dropdown:after{content:"";border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid currentColor;opacity:.6;position:absolute;right:4px;top:calc(50% - 2px)}.ProsemirrorEditor .ProseMirror-menu-submenu{border-top-right-radius:4px}.ProsemirrorEditor .ProseMirror-menu-dropdown-menu,.ProsemirrorEditor .ProseMirror-menu-submenu{position:absolute;background:white;color:#666;border:1px solid #aaa;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.ProsemirrorEditor .ProseMirror-menu-dropdown-menu{z-index:15;min-width:6em;margin-top:2px}.ProsemirrorEditor .ProseMirror-menu-dropdown-item{cursor:pointer}.ProsemirrorEditor .ProseMirror-menu-dropdown-item div[title],.ProsemirrorEditor .ProseMirror-menu-submenu-wrap{padding:4px}.ProsemirrorEditor .ProseMirror-menu-dropdown-item:hover{background:#f2f2f2}.ProsemirrorEditor .ProseMirror-menu-submenu-wrap{position:relative}.ProsemirrorEditor .ProseMirror-menu-submenu-label:after{content:"";border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid currentColor;opacity:.6;position:absolute;right:4px;top:calc(50% - 4px)}.ProsemirrorEditor .ProseMirror-menu-submenu{display:none;min-width:4em;left:100%;top:0}.ProsemirrorEditor .ProseMirror-menu-active{background:#eee;border-radius:4px;border:1px solid #ededed !important}.ProsemirrorEditor .ProseMirror-menu-disabled{opacity:.3}.ProsemirrorEditor .ProseMirror-menu-submenu-wrap:hover .ProseMirror-menu-submenu,.ProsemirrorEditor .ProseMirror-menu-submenu-wrap-active .ProseMirror-menu-submenu{display:block}.ProsemirrorEditor .ProseMirror-icon{display:inline-block;line-height:.8;vertical-align:-2px;padding:1px 7px;cursor:pointer;border:1px solid transparent}.ProsemirrorEditor .ProseMirror-menu-disabled.ProseMirror-icon{cursor:default}.ProsemirrorEditor .ProseMirror-icon svg{fill:currentColor;height:1em}.ProsemirrorEditor .ProseMirror-icon span{vertical-align:text-top}.ProsemirrorEditor.plainMenu .ProseMirror{border-top-left-radius:0 !important;border-top-right-radius:0 !important;border-top-width:1px !important}.ProsemirrorEditor.plainMenu .ProseMirror-menu-group{padding:5px}.ProsemirrorEditor.plainMenu .ProseMirror-menuitem .ProseMirror-menu-group{padding:2px}.ProsemirrorEditor.plainMenu .ProseMirror-menubar~.ProseMirror-focused{border-color:#6fdbe8 !important}.ProsemirrorEditor.plainMenu .ProseMirror-textblock-dropdown{min-width:3em}.ProsemirrorEditor.plainMenu .ProseMirror-menubar-wrapper{z-index:8}.ProsemirrorEditor.plainMenu .ProseMirror-menubar{background-color:#f7f7f7;border-top-left-radius:4px;border-top-right-radius:4px;border:1px solid #ddd;position:relative;min-height:1em;color:#666;padding:1px 6px 1px 0;top:0;left:0;right:0;z-index:10;-moz-box-sizing:border-box;box-sizing:border-box;overflow:visible}.ProsemirrorEditor.focusMenu .form-control:focus{border-top-left-radius:0 !important}.ProsemirrorEditor.focusMenu .ProseMirror-menubar{display:table;min-height:1em;color:#666;padding:2px 6px;top:0;left:0;right:0;z-index:10;-moz-box-sizing:border-box;box-sizing:border-box;overflow:visible;margin-top:-26px;background:white;border:1px solid #d7d7d7;border-bottom:0;border-top:2px solid #d7d7d7;border-top-left-radius:4px;border-top-right-radius:4px;float:left}@-moz-document url-prefix(){.ProsemirrorEditor.focusMenu .ProseMirror-menubar{margin-top:-27px}}.ProsemirrorEditor .ProseMirror{position:relative;word-wrap:break-word;white-space:pre-wrap;-webkit-font-variant-ligatures:none;font-variant-ligatures:none}.ProsemirrorEditor .ProseMirror ul,.ProsemirrorEditor .ProseMirror ol{cursor:default}.ProsemirrorEditor .ProseMirror pre{white-space:pre-wrap}.ProsemirrorEditor .ProseMirror li{position:relative}.ProsemirrorEditor .ProseMirror img{max-width:100%}.ProsemirrorEditor .ProseMirror-hideselection *::selection{background:transparent}.ProsemirrorEditor .ProseMirror-hideselection *::-moz-selection{background:transparent}.ProsemirrorEditor .ProseMirror-selectednode{outline:2px dashed #8cf}.ProsemirrorEditor li.ProseMirror-selectednode{outline:none}.ProsemirrorEditor li.ProseMirror-selectednode:after{content:"";position:absolute;left:-32px;right:-2px;top:-2px;bottom:-2px;border:2px solid #8cf;pointer-events:none}.ProsemirrorEditor .ProseMirror-textblock-dropdown{min-width:3em}.ProsemirrorEditor .ProseMirror-menu{margin:0 -4px;line-height:1}.ProsemirrorEditor .ProseMirror-tooltip .ProseMirror-menu{width:-webkit-fit-content;width:fit-content;white-space:pre}.ProsemirrorEditor .ProseMirror-gapcursor{display:none;pointer-events:none;position:absolute}.ProsemirrorEditor .ProseMirror-gapcursor:after{content:"";display:block;position:absolute;top:-2px;width:20px;border-top:1px solid black;animation:ProseMirror-cursor-blink 1.1s steps(2, start) infinite}@keyframes ProseMirror-cursor-blink{to{visibility:hidden}}.ProsemirrorEditor .ProseMirror-focused .ProseMirror-gapcursor{display:block}.ProsemirrorEditor .ProseMirror-example-setup-style hr{padding:2px 10px;border:none;margin:1em 0}.ProsemirrorEditor .ProseMirror-example-setup-style hr:after{content:"";display:block;height:1px;background-color:silver;line-height:2px}.ProsemirrorEditor .ProseMirror ul,.ProsemirrorEditor .ProseMirror ol{padding-left:30px}.ProsemirrorEditor .ProseMirror blockquote{padding-left:1em;border-left:3px solid #eee;margin-left:0;margin-right:0}.ProsemirrorEditor .ProseMirror-example-setup-style img{cursor:default}.ProsemirrorEditor .ProseMirror p{margin-top:1em}.ProsemirrorEditor .ProseMirror p:first-child{margin:0px}.ProsemirrorEditor .ProseMirror p:first-child+*{margin-top:1em}.ProsemirrorEditor .ProsemirrorEditor{position:relative}.ProsemirrorEditor .ProsemirrorEditor .ProseMirror{padding-right:12px !important}.ProsemirrorEditor .ProsemirrorEditor img{max-width:100%}.ProsemirrorEditor .ProseMirror h1:first-child,.ProsemirrorEditor .ProseMirror h2:first-child,.ProsemirrorEditor .ProseMirror h3:first-child,.ProsemirrorEditor .ProseMirror h4:first-child,.ProsemirrorEditor .ProseMirror h5:first-child,.ProsemirrorEditor .ProseMirror h6:first-child{margin-top:10px}.ProsemirrorEditor .ProseMirror [data-mention]{color:#6fdbe8}.ProsemirrorEditor .ProseMirror{outline:none}.ProsemirrorEditor .ProseMirror [data-oembed]{font-size:0}.ProsemirrorEditor .ProseMirror iframe{pointer-events:none;display:block}.ProsemirrorEditor .ProseMirror p{margin-bottom:1em}.ProsemirrorEditor .ProseMirror-textblock-dropdown{min-width:3em}.ProsemirrorEditor .ProseMirror .placeholder{padding:0px !important;pointer-events:none;height:0}.ProsemirrorEditor .ProseMirror:focus .placeholder{display:none}.ProsemirrorEditor .ProseMirror .tableWrapper{overflow-x:auto}.ProsemirrorEditor .ProseMirror .column-resize-handle{position:absolute;right:-2px;top:0;bottom:0;width:4px;z-index:20;background-color:#adf;pointer-events:none}.ProsemirrorEditor .ProseMirror.resize-cursor{cursor:ew-resize;cursor:col-resize}.ProsemirrorEditor .ProseMirror .selectedCell:after{z-index:2;position:absolute;content:"";left:0;right:0;top:0;bottom:0;background:rgba(200,200,255,0.4);pointer-events:none}.ProsemirrorEditor .ProseMirror-menubar-wrapper{position:relative;outline:none}.ProsemirrorEditor .ProseMirror table{margin:0}.ProsemirrorEditor .ProseMirror .tableWrapper{margin:1em 0}.ProseMirror-prompt{background:white;padding:5px 10px 5px 15px;border:1px solid silver;position:fixed;border-radius:3px;min-width:300px;z-index:999999;box-shadow:-0.5px 2px 5px rgba(0,0,0,0.2)}.ProseMirror-prompt h5{font-weight:bold;font-size:100%;margin:15px 0}.ProseMirror-prompt input{margin-bottom:5px}.ProseMirror-prompt-close{position:absolute;left:2px;top:1px;color:#666;border:none;background:transparent;padding:0}.ProseMirror-prompt-close:after{content:"✕";font-size:12px}.ProseMirror-invalid{background:#ffc;border:1px solid #cc7;border-radius:4px;padding:5px 10px;position:absolute;min-width:10em}.ProseMirror-prompt-buttons{margin:15px 0;text-align:center}.atwho-view .cur{border-left:3px solid #59d6e4;background-color:#f7f7f7 !important}.atwho-user,.atwho-space,.atwho-input a{color:#59d6e4}.atwho-input a:hover{color:#59d6e4}.atwho-view strong{background-color:#f9f0d2}.atwho-view .cur strong{background-color:#f9f0d2}[data-emoji-category]{max-height:200px;display:block;position:relative;overflow:auto}[data-emoji-category] .atwho-emoji-entry{width:24px;height:28px;overflow:hidden}[data-emoji-category] .atwho-emoji-entry.cur{background-color:#ededed !important}.emoji-nav{padding-top:10px}.emoji-nav .emoji-nav-item{border-top:2px solid #fff8e0}.emoji-nav .emoji-nav-item.cur{border-left:0px;border-top:2px solid #6fdbe8}@media screen and (max-width:768px){.ProsemirrorEditor.focusMenu .ProseMirror-menubar{min-height:1em}}.icon-sm,.fa-sm{font-size:.875em}.icon-lg,.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-0.0667em}.icon-2x,.fa-2x{font-size:2em}.icon-3x,.fa-3x{font-size:3em}.icon-4x,.fa-4x{font-size:4em}.icon-5x,.fa-5x{font-size:5em}.icon-6x,.fa-6x{font-size:6em}.icon-7x,.fa-7x{font-size:7em}.icon-9x,.fa-9x{font-size:9em}.icon-10x,.fa-10x{font-size:10em}/*! Select2 humhub Theme v0.1.0-beta.4 | MIT License | github.com/select2/select2-humhub-theme */.select2-container--humhub{display:block}.select2-container--humhub .select2-selection{background-color:#fff;border:2px solid #ededed;border-radius:4px;color:#555;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;outline:0}.select2-container--humhub .select2-search--dropdown .select2-search__field{background-color:#fff;border:2px solid #ededed;border-radius:4px;color:#555;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px}.select2-container--humhub .select2-search__field{outline:0}.select2-container--humhub .select2-search__field::-webkit-input-placeholder{color:#999}.select2-container--humhub .select2-search__field:-moz-placeholder{color:#999}.select2-container--humhub .select2-search__field::-moz-placeholder{color:#999;opacity:1}.select2-container--humhub .select2-search__field:-ms-input-placeholder{color:#999}.select2-container--humhub .select2-results__option[role=group]{padding:0}.select2-container--humhub .select2-results__option[aria-disabled=true]{color:#777;cursor:not-allowed}.select2-container--humhub .select2-results__option[aria-selected=true]{background-color:#f5f5f5;color:#262626;border-left:3px solid transparent}.select2-container--humhub .select2-results__option[aria-selected=false]{border-left:3px solid transparent}.select2-container--humhub .select2-results__option--highlighted[aria-selected]{background-color:#f7f7f7;border-left:3px solid #6fdbe8;color:#555}.select2-container--humhub .select2-results__option .select2-results__option{padding:6px 12px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option{margin-left:-12px;padding-left:24px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-24px;padding-left:36px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-36px;padding-left:48px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-48px;padding-left:60px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-60px;padding-left:72px}.select2-container--humhub .select2-results__group{color:#777;display:block;padding:6px 12px;font-size:12px;line-height:1.42857143;white-space:nowrap}.select2-container--humhub.select2-container--focus .select2-selection,.select2-container--humhub.select2-container--open .select2-selection{border:2px solid #6fdbe8;outline:0;box-shadow:none}.select2-container--humhub.select2-container--open .select2-selection .select2-selection__arrow b{border-color:transparent transparent #999 transparent;border-width:0 4px 4px 4px}.select2-container--humhub .select2-selection__clear{color:#999;cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--humhub .select2-selection__clear:hover{color:#333}.select2-container--humhub.select2-container--disabled .select2-selection{border-color:#ccc;-webkit-box-shadow:none;box-shadow:none}.select2-container--humhub.select2-container--disabled .select2-selection,.select2-container--humhub.select2-container--disabled .select2-search__field{cursor:not-allowed}.select2-container--humhub.select2-container--disabled .select2-selection,.select2-container--humhub.select2-container--disabled .select2-selection--multiple .select2-selection__choice{background-color:#eee}.select2-container--humhub.select2-container--disabled .select2-selection__clear,.select2-container--humhub.select2-container--disabled .select2-selection--multiple .select2-selection__choice__remove{display:none}.select2-container--humhub .select2-dropdown{-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);border-color:#d7d7d7;overflow-x:hidden;margin-top:-1px}.select2-container--humhub .select2-dropdown--above{margin-top:1px}.select2-container--humhub .select2-results>.select2-results__options{max-height:400px;overflow-y:auto}.select2-container--humhub .select2-selection--single{height:34px;line-height:1.42857143;padding:6px 24px 6px 12px}.select2-container--humhub .select2-selection--single .select2-selection__arrow{position:absolute;bottom:0;right:12px;top:0;width:4px}.select2-container--humhub .select2-selection--single .select2-selection__arrow b{border-color:#999 transparent transparent transparent;border-style:solid;border-width:4px 4px 0 4px;height:0;left:0;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--humhub .select2-selection--single .select2-selection__rendered{color:#555;padding:0}.select2-container--humhub .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--humhub .select2-selection--multiple{min-height:34px;padding:2px}.select2-container--humhub .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;display:block;line-height:1.42857143;list-style:none;margin:0;overflow:hidden;padding:0;width:100%;text-overflow:ellipsis;white-space:nowrap}.select2-container--humhub .select2-selection--multiple .select2-selection__placeholder{color:#999;float:left;margin-top:5px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice{color:#555;border-radius:4px;cursor:default;padding:0 6px;background-color:#6fdbe8;color:#fff;border-radius:3px;font-size:12px !important;padding:0 5px 2px 2px;float:left;margin:2px;height:28px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice img,.select2-container--humhub .select2-selection--multiple .select2-selection__choice div{margin-right:5px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice span.no-image{line-height:27px;padding-left:5px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice i{margin:0px 2px;line-height:27px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice .picker-close{cursor:pointer}.select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field{background:transparent;padding:0 5px;width:auto !important;height:32px;line-height:1.42857143;margin-top:0;min-width:5em}.select2-container--humhub .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:none;font-weight:bold;margin-right:3px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--humhub .select2-selection--multiple .select2-selection__clear{margin-top:6px}.select2-container--humhub.input-sm,.select2-container--humhub.input-lg{border-radius:0;font-size:12px;height:auto;line-height:1;padding:0}.select2-container--humhub.input-sm .select2-selection--single,.input-group-sm .select2-container--humhub .select2-selection--single,.form-group-sm .select2-container--humhub .select2-selection--single{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 22px 5px 10px}.select2-container--humhub.input-sm .select2-selection--single .select2-selection__arrow b,.input-group-sm .select2-container--humhub .select2-selection--single .select2-selection__arrow b,.form-group-sm .select2-container--humhub .select2-selection--single .select2-selection__arrow b{margin-left:-5px}.select2-container--humhub.input-sm .select2-selection--multiple,.input-group-sm .select2-container--humhub .select2-selection--multiple,.form-group-sm .select2-container--humhub .select2-selection--multiple{min-height:30px}.select2-container--humhub.input-sm .select2-selection--multiple .select2-selection__choice,.input-group-sm .select2-container--humhub .select2-selection--multiple .select2-selection__choice,.form-group-sm .select2-container--humhub .select2-selection--multiple .select2-selection__choice{font-size:12px;line-height:1.5;margin:4px 0 0 5px;padding:0 5px}.select2-container--humhub.input-sm .select2-selection--multiple .select2-search--inline .select2-search__field,.input-group-sm .select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field,.form-group-sm .select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field{padding:0 10px;font-size:12px;height:28px;line-height:1.5}.select2-container--humhub.input-sm .select2-selection--multiple .select2-selection__clear,.input-group-sm .select2-container--humhub .select2-selection--multiple .select2-selection__clear,.form-group-sm .select2-container--humhub .select2-selection--multiple .select2-selection__clear{margin-top:5px}.select2-container--humhub.input-lg .select2-selection--single,.input-group-lg .select2-container--humhub .select2-selection--single,.form-group-lg .select2-container--humhub .select2-selection--single{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 31px 10px 16px}.select2-container--humhub.input-lg .select2-selection--single .select2-selection__arrow,.input-group-lg .select2-container--humhub .select2-selection--single .select2-selection__arrow,.form-group-lg .select2-container--humhub .select2-selection--single .select2-selection__arrow{width:5px}.select2-container--humhub.input-lg .select2-selection--single .select2-selection__arrow b,.input-group-lg .select2-container--humhub .select2-selection--single .select2-selection__arrow b,.form-group-lg .select2-container--humhub .select2-selection--single .select2-selection__arrow b{border-width:5px 5px 0 5px;margin-left:-5px;margin-left:-10px;margin-top:-2.5px}.select2-container--humhub.input-lg .select2-selection--multiple,.input-group-lg .select2-container--humhub .select2-selection--multiple,.form-group-lg .select2-container--humhub .select2-selection--multiple{min-height:46px}.select2-container--humhub.input-lg .select2-selection--multiple .select2-selection__choice,.input-group-lg .select2-container--humhub .select2-selection--multiple .select2-selection__choice,.form-group-lg .select2-container--humhub .select2-selection--multiple .select2-selection__choice{font-size:18px;line-height:1.3333333;border-radius:4px;margin:9px 0 0 8px;padding:0 10px}.select2-container--humhub.input-lg .select2-selection--multiple .select2-search--inline .select2-search__field,.input-group-lg .select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field,.form-group-lg .select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field{padding:0 16px;font-size:18px;height:44px;line-height:1.3333333}.select2-container--humhub.input-lg .select2-selection--multiple .select2-selection__clear,.input-group-lg .select2-container--humhub .select2-selection--multiple .select2-selection__clear,.form-group-lg .select2-container--humhub .select2-selection--multiple .select2-selection__clear{margin-top:10px}.select2-container--humhub.input-lg.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #999 transparent;border-width:0 5px 5px 5px}.input-group-lg .select2-container--humhub.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #999 transparent;border-width:0 5px 5px 5px}.select2-container--humhub[dir="rtl"] .select2-selection--single{padding-left:24px;padding-right:12px}.select2-container--humhub[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:0;padding-left:0;text-align:right}.select2-container--humhub[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--humhub[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:12px;right:auto}.select2-container--humhub[dir="rtl"] .select2-selection--single .select2-selection__arrow b{margin-left:0}.select2-container--humhub[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--humhub[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder{float:right}.select2-container--humhub[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:0;margin-right:6px}.select2-container--humhub[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.has-warning .select2-dropdown,.has-warning .select2-selection{border-color:#fdd198}.has-warning .select2-container--focus .select2-selection,.has-warning .select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fffefc;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fffefc;border-color:#fcbb66}.has-warning.select2-drop-active{border-color:#fcbb66}.has-warning.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#fcbb66}.has-error .select2-dropdown,.has-error .select2-selection{border-color:#ff8989}.has-error .select2-container--focus .select2-selection,.has-error .select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffefef;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffefef;border-color:#ff5656}.has-error.select2-drop-active{border-color:#ff5656}.has-error.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#ff5656}.has-success .select2-dropdown,.has-success .select2-selection{border-color:#97d271}.has-success .select2-container--focus .select2-selection,.has-success .select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d0ebbe;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d0ebbe;border-color:#7bc64a}.has-success.select2-drop-active{border-color:#7bc64a}.has-success.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#7bc64a}.input-group .select2-container--humhub{display:table;table-layout:fixed;position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group.select2-humhub-prepend .select2-container--humhub .select2-selection{border-bottom-left-radius:0;border-top-left-radius:0}.input-group.select2-humhub-append .select2-container--humhub .select2-selection{border-bottom-right-radius:0;border-top-right-radius:0}.select2-humhub-append .select2-container--humhub,.select2-humhub-prepend .select2-container--humhub,.select2-humhub-append .input-group-btn,.select2-humhub-prepend .input-group-btn,.select2-humhub-append .input-group-btn .btn,.select2-humhub-prepend .input-group-btn .btn{vertical-align:top}.form-control.select2-hidden-accessible{position:absolute !important;width:1px !important}.form-inline .select2-container--humhub{display:inline-block}ul.tag_input{list-style:none;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;padding:0 0 9px 4px}ul.tag_input li img{margin:0 5px 0 0}.tag_input_field{outline:none;border:none !important;padding:5px 4px 0 !important;width:170px;margin:2px 0 0 !important}.userInput,.spaceInput{background-color:#6fdbe8;font-weight:600;color:#fff;border-radius:3px;font-size:12px !important;padding:2px;float:left;margin:3px 4px 0 0}.userInput i,.spaceInput i{padding:0 6px;font-size:14px;cursor:pointer;line-height:8px} \ No newline at end of file From fb84572726e8a9ca48bab5e26a4a3b4b55cc248b Mon Sep 17 00:00:00 2001 From: buddh4 Date: Sat, 15 Dec 2018 23:03:57 +0100 Subject: [PATCH 12/17] Enh: Allow multiple IconProvider --- package-lock.json | 12 +- .../modules/ui/form/widgets/IconPicker.php | 12 +- .../humhub/modules/ui/icon/IconFactory.php | 50 ------ .../FontAwesomeIconProvider.php} | 12 +- .../ui/icon/components/IconFactory.php | 149 ++++++++++++++++++ .../ui/icon/components/IconProvider.php | 62 ++++++++ .../humhub/modules/ui/icon/widgets/Icon.php | 108 ++++++++++--- 7 files changed, 318 insertions(+), 87 deletions(-) delete mode 100644 protected/humhub/modules/ui/icon/IconFactory.php rename protected/humhub/modules/ui/icon/{FontAwesomeIconFactory.php => components/FontAwesomeIconProvider.php} (93%) create mode 100644 protected/humhub/modules/ui/icon/components/IconFactory.php create mode 100644 protected/humhub/modules/ui/icon/components/IconProvider.php diff --git a/package-lock.json b/package-lock.json index eaf471ba8f..7ae5be4799 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1726,9 +1726,9 @@ "dev": true }, "sprintf-js": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz", - "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", "dev": true }, "sshpk": { @@ -1869,9 +1869,9 @@ "optional": true }, "underscore.string": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", - "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", + "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", "dev": true, "requires": { "sprintf-js": "^1.0.3", diff --git a/protected/humhub/modules/ui/form/widgets/IconPicker.php b/protected/humhub/modules/ui/form/widgets/IconPicker.php index ce453fadec..6d89d73223 100644 --- a/protected/humhub/modules/ui/form/widgets/IconPicker.php +++ b/protected/humhub/modules/ui/form/widgets/IconPicker.php @@ -28,6 +28,10 @@ use yii\web\JsExpression; */ class IconPicker extends Select2 { + /** + * @var string optional icon provider id + */ + public $lib; /** * @inheritdoc @@ -68,13 +72,13 @@ class IconPicker extends Select2 */ protected function populateIconList() { - foreach ($this->getIcons() as $icon) { + foreach ($this->getIconNames() as $icon) { $title = $icon; if (substr($title, 0, 3) === 'fa-') { $title = substr($title, 3); } - $this->data[$icon] = Icon::get($icon) . '  ' . $title; + $this->data[$icon] = Icon::get(['name' => $icon, 'lib' => $this->lib]) . '  ' . $title; } } @@ -83,9 +87,9 @@ class IconPicker extends Select2 * * @return array a list of icons */ - public function getIcons() + public function getIconNames() { - return Icon::$names; + return Icon::getNames($this->lib); } } diff --git a/protected/humhub/modules/ui/icon/IconFactory.php b/protected/humhub/modules/ui/icon/IconFactory.php deleted file mode 100644 index 8ae4a68977..0000000000 --- a/protected/humhub/modules/ui/icon/IconFactory.php +++ /dev/null @@ -1,50 +0,0 @@ - true]); - * - * IconFactory::render(['name' => 'task', 'fixedWith' => true]); - * - * IconFactory::render(new Icon(['name' => 'task', 'fixedWith' => true])); - * ``` - * @param $icon string|Icon|[] either an icon name, icon instance or icon array definition - * @return mixed - */ - public function render($icon, $options = []); - - /** - * Renders a icon list: - * - * 'My List Item 1', 'options' => []], - * ['tachometer' => 'My List Item 2', 'options' => []] - * ]); ?> - * - * @param $listDefinition - * @return $ - */ - public function renderList($listDefinition); - -} \ No newline at end of file diff --git a/protected/humhub/modules/ui/icon/FontAwesomeIconFactory.php b/protected/humhub/modules/ui/icon/components/FontAwesomeIconProvider.php similarity index 93% rename from protected/humhub/modules/ui/icon/FontAwesomeIconFactory.php rename to protected/humhub/modules/ui/icon/components/FontAwesomeIconProvider.php index 5222a28c99..0d958f061f 100644 --- a/protected/humhub/modules/ui/icon/FontAwesomeIconFactory.php +++ b/protected/humhub/modules/ui/icon/components/FontAwesomeIconProvider.php @@ -1,5 +1,5 @@ static::class]); + } + + return static::$instance; + } + + /** + * Adds a provider to this factory, if `$isDefault` is set to true the current default IconProvider + * will be overwritten. + * + * @param IconProvider $instance + */ + public static function registerProvider(IconProvider $instance, $isDefault = false) + { + static::$provider[$instance->getId()] = $instance; + if($isDefault) { + static::$defaultProvider = $instance; + } + } + + /** + * @inheritdoc + */ + public function init() + { + $fontAwesomeIconProvider = new FontAwesomeIconProvider(); + static::registerProvider($fontAwesomeIconProvider, true); + static::$fallbackProvider = $fontAwesomeIconProvider; + $this->trigger(static::EVENT_AFTER_INIT); + } + + /** + * @param $icon + * @param array $options + * @see IconProvider::render() + * @return mixed + */ + public function render($icon, $options = []) + { + $result = $this->getProvider($icon->lib)->render($icon, $options); + if(empty($result)) { + $result = static::$fallbackProvider->render($icon, $options); + } + + return $result; + } + + /** + * @param string|null $providerId icon provider id + * @return IconProvider + */ + public function getProvider($providerId = null) + { + if(empty($providerId)) { + return static::$defaultProvider; + } + + if(!isset(static::$provider[$providerId])) { + Yii::warning(Yii::t('UiModule.icon', 'No icon provider registered for provider id {id}', ['id' => $providerId])); + return static::$defaultProvider; + } + + return static::$provider[$providerId]; + } + + /** + * + * @param $listDefinition + * @param null $providerId + * @see IconProvider::renderList() + * @return mixed + */ + public function renderList($listDefinition, $providerId = null) + { + $result = $this->getProvider($providerId)->renderList($listDefinition); + if(empty($result)) { + $result = static::$fallbackProvider->renderList($listDefinition); + } + + return $result; + } + + /** + * Returns the supported icon names of the IconProvider + * + * @param null $providerId + * @see IconProvider::getNames() + * @return string[] + */ + public function getNames($providerId = null) + { + return $this->getProvider($providerId)->getNames(); + } +} \ No newline at end of file diff --git a/protected/humhub/modules/ui/icon/components/IconProvider.php b/protected/humhub/modules/ui/icon/components/IconProvider.php new file mode 100644 index 0000000000..50cf5bda16 --- /dev/null +++ b/protected/humhub/modules/ui/icon/components/IconProvider.php @@ -0,0 +1,62 @@ + true]); + * + * IconFactory::render(['name' => 'task', 'fixedWith' => true]); + * + * IconFactory::render(new Icon(['name' => 'task', 'fixedWith' => true])); + * ``` + * + * > Note: If the provider does not support a specific icon name or feature it should return null. + * + * @param $icon string|Icon|[]|null either an icon name, icon instance or icon array definition + * @return mixed + */ + public function render($icon, $options = []); + + /** + * Renders a icon list: + * + * 'My List Item 1', 'options' => []], + * ['tachometer' => 'My List Item 2', 'options' => []] + * ]); ?> + * + * > Note: If the provider does not support this feature, it should return null. + * + * @param $listDefinition + * @return $ + */ + public function renderList($listDefinition); + + /** + * Return all supported icon names. + * @return string[] + */ + public function getNames(); + +} \ No newline at end of file diff --git a/protected/humhub/modules/ui/icon/widgets/Icon.php b/protected/humhub/modules/ui/icon/widgets/Icon.php index dc4e37f242..51a54d8bfa 100644 --- a/protected/humhub/modules/ui/icon/widgets/Icon.php +++ b/protected/humhub/modules/ui/icon/widgets/Icon.php @@ -1,13 +1,33 @@ 'danger']); + * + * // Use another icon lib + * Icon::get('myIcon', ['lib' => 'myIconLib']); + * ``` + * + * @see IconFactory + * @see IconProvider * @since 1.4 */ class Icon extends \humhub\components\Widget @@ -25,6 +45,9 @@ class Icon extends \humhub\components\Widget const SIZE_9x = '9x'; const SIZE_10x = '10x'; + /** + * @var array contains all available names which should be supported by the main icon provider + */ public static $names = [ 'adjust', 'adn', @@ -609,11 +632,6 @@ class Icon extends \humhub\components\Widget 'youtube-square' ]; - /** - * @var IconFactory - */ - private static $iconFactory; - /** * @var string icon name */ @@ -666,20 +684,35 @@ class Icon extends \humhub\components\Widget public $color; /** - * @return IconFactory - * @throws \yii\base\InvalidConfigException + * @var string explicitly define a icon library, if not defined the default icon provider is used */ - protected static function getFactory() - { - if(!static::$iconFactory) { - static::$iconFactory = (isset(Yii::$app->params['iconFactory'])) - ? Yii::createObject(Yii::$app->params['iconFactory']) - : new FontAwesomeIconFactory(); - } + public $lib; - return static::$iconFactory; - } + /** + * Can be used to get an Icon instance from an unknown format. + * + * The following formats are supported: + * + * ```php + * // Will just return the given $instance + * Icon::get($instance); + * + * // Will overwrite the instance configuration and return the given $instane + * Icon::get($instance, $someOptions); + * + * + * // Will create an instance with the given icon name and options + * Icon::get('tasks', $someOptoins); + * + * + * // Will create an instance from the given options array + * Icon::get(['name' => 'tasks', color => 'success']); + * ``` + * @param $icon + * @param array $options + * @return Icon|null|object + */ public static function get($icon, $options = []) { if($icon instanceof static) { @@ -690,10 +723,25 @@ class Icon extends \humhub\components\Widget } else if(is_array($icon)) { return new Icon($icon); } + + return null; } /** - * @return mixed|string + * Returns all supported icon names of a provider- + * + * @param null $providerId + * @return string[] + * @see IconFactory::getNames() + * @throws \yii\base\InvalidConfigException + */ + public static function getNames($providerId = null) + { + return IconFactory::getInstance()->getNames($providerId); + } + + /** + * @inheritdoc * @throws \yii\base\InvalidConfigException */ public function run() @@ -732,17 +780,26 @@ class Icon extends \humhub\components\Widget } } - return static::getFactory()->render($this); + return IconFactory::getInstance()->render($this); } /** + * Renders a icon list e.g.: + * + * ```php + * Icon::renderList([ + * ['tasks' => 'First list item', 'options' => ['color' => 'success']], + * ['book' => 'First second item', 'options' => ['color' => 'danger']] + * ]) + * ``` + * * @param $listDefinition * @return mixed * @throws \yii\base\InvalidConfigException */ public static function renderList($listDefinition) { - return static::getFactory()->renderList($listDefinition); + return IconFactory::getInstance()->renderList($listDefinition); } /** @@ -751,15 +808,15 @@ class Icon extends \humhub\components\Widget */ public function __toString() { - $result = $this::widget($this->getWidgetOptions()); + $result = $this::widget($this->asArray()); return $result ? $result : ''; } /** - * @return array all options required for rendering the widget + * @return [] array representation of this icon */ - public function getWidgetOptions() + public function asArray() { return [ 'id' => $this->id, @@ -773,6 +830,7 @@ class Icon extends \humhub\components\Widget 'border' => $this->border, 'style' => $this->style, 'color' => $this->color, + 'lib' => $this->lib ]; } From a2f8e003990829b78f3a7eb2e2c83d84b31ced97 Mon Sep 17 00:00:00 2001 From: buddh4 Date: Sun, 16 Dec 2018 02:12:30 +0100 Subject: [PATCH 13/17] Enh: Added builder pattern to Icon API Enh: Added `Icon::htmlOptions` --- .../components/FontAwesomeIconProvider.php | 6 +- .../humhub/modules/ui/icon/widgets/Icon.php | 155 +++++++++++++++--- 2 files changed, 134 insertions(+), 27 deletions(-) diff --git a/protected/humhub/modules/ui/icon/components/FontAwesomeIconProvider.php b/protected/humhub/modules/ui/icon/components/FontAwesomeIconProvider.php index 0d958f061f..3c36b8861f 100644 --- a/protected/humhub/modules/ui/icon/components/FontAwesomeIconProvider.php +++ b/protected/humhub/modules/ui/icon/components/FontAwesomeIconProvider.php @@ -29,10 +29,8 @@ class FontAwesomeIconProvider implements IconProvider { $icon = Icon::get($icon,$options); - $options = [ - 'class' =>'fa fa-'.$icon->name, - 'style' => $icon->style - ]; + $options = $icon->htmlOptions; + $options['class'] = 'fa fa-'.$icon->name; if($icon->size) { Html::addCssClass($options, $this->getIconSizeClass($icon)); diff --git a/protected/humhub/modules/ui/icon/widgets/Icon.php b/protected/humhub/modules/ui/icon/widgets/Icon.php index 51a54d8bfa..73469c2c69 100644 --- a/protected/humhub/modules/ui/icon/widgets/Icon.php +++ b/protected/humhub/modules/ui/icon/widgets/Icon.php @@ -1,8 +1,9 @@ getNames($providerId); } + /** + * Renders a icon list e.g.: + * + * ```php + * Icon::renderList([ + * ['tasks' => 'First list item', 'options' => ['color' => 'success']], + * ['book' => 'First second item', 'options' => ['color' => 'danger']] + * ]) + * ``` + * + * @param $listDefinition + * @return mixed + * @throws \yii\base\InvalidConfigException + */ + public static function renderList($listDefinition) + { + return IconFactory::getInstance()->renderList($listDefinition); + } + /** * @inheritdoc * @throws \yii\base\InvalidConfigException @@ -780,37 +800,116 @@ class Icon extends \humhub\components\Widget } } + if($this->id) { + $this->htmlOptions['id'] = $this->id; + } + return IconFactory::getInstance()->render($this); } /** - * Renders a icon list e.g.: - * - * ```php - * Icon::renderList([ - * ['tasks' => 'First list item', 'options' => ['color' => 'success']], - * ['book' => 'First second item', 'options' => ['color' => 'danger']] - * ]) - * ``` - * - * @param $listDefinition - * @return mixed - * @throws \yii\base\InvalidConfigException + * @param $size string + * @return $this */ - public static function renderList($listDefinition) + public function size($size) { - return IconFactory::getInstance()->renderList($listDefinition); + $this->size = $size; + return $this; } /** - * @return string - * @throws \Exception + * @param bool $active + * @return $this */ - public function __toString() + public function fixedWith($active = true) { - $result = $this::widget($this->asArray()); + $this->fixedWidth = $active; + return $this; + } - return $result ? $result : ''; + /** + * @param bool $active + * @return $this + */ + public function listItem($active = true) + { + $this->listItem; + return $this; + } + + /** + * @param bool $active + * @return $this + */ + public function right($active = true) + { + if($active) { + $this->left(false); + } + + $this->right = $active; + return $this; + } + + /** + * @param bool $active + * @return $this + */ + public function left($active = true) + { + if($active) { + $this->right(false); + } + + $this->left = $active; + return $this; + } + + /** + * @param bool $active + */ + public function ariaHidden($active = true) + { + $this->ariaHidden = $active; + return $this; + } + + /** + * @param bool $active + * @return $this + */ + public function border($active = true) + { + $this->border = $active; + return $this; + } + + /** + * @param string|array $style + */ + public function style($style) + { + Html::addCssStyle($this->htmlOptions, $style); + return $this; + } + + /** + * @param string $color + */ + public function color($color) + { + $this->color = $color; + return $this; + } + + /** + * @param $lib + * @return $this + */ + public function lib($lib) + { + $this->lib = $lib; + return $this; } /** @@ -828,10 +927,20 @@ class Icon extends \humhub\components\Widget 'left' => $this->left, 'ariaHidden' => $this->ariaHidden, 'border' => $this->border, - 'style' => $this->style, + 'htmlOptions' => $this->htmlOptions, 'color' => $this->color, 'lib' => $this->lib ]; } + /** + * @return string + * @throws \Exception + */ + public function __toString() + { + $result = $this::widget($this->asArray()); + + return $result ? $result : ''; + } } \ No newline at end of file From 2a78f169e5530c860a69856a672c514bcbde1b79 Mon Sep 17 00:00:00 2001 From: buddh4 Date: Thu, 31 Jan 2019 21:06:19 +0100 Subject: [PATCH 14/17] - Enh: Added `humhub\libs\Html::addPjaxPrevention()` for link options - Refactored old menu style creation --- composer.json | 2 +- protected/humhub/libs/Html.php | 5 + .../modules/admin/widgets/AdminMenu.php | 101 +++--- .../admin/widgets/AdvancedSettingMenu.php | 74 ++--- .../admin/widgets/AuthenticationMenu.php | 18 +- .../admin/widgets/GroupManagerMenu.php | 31 +- .../modules/admin/widgets/GroupMenu.php | 11 +- .../modules/admin/widgets/InformationMenu.php | 45 +-- .../modules/admin/widgets/SettingsMenu.php | 45 +-- .../modules/admin/widgets/SpaceMenu.php | 18 +- .../humhub/modules/admin/widgets/UserMenu.php | 65 ++-- .../modules/admin/widgets/UserSettingMenu.php | 21 +- .../helpers/ContentContainerHelper.php | 5 +- protected/humhub/modules/dashboard/Events.php | 20 +- .../humhub/modules/directory/widgets/Menu.php | 40 +-- .../modules/friendship/widgets/ManageMenu.php | 29 +- .../modules/manage/widgets/DefaultMenu.php | 13 +- .../modules/manage/widgets/MemberMenu.php | 25 +- .../manage/widgets/SecurityTabMenu.php | 13 +- .../space/widgets/HeaderControlsMenu.php | 90 +++--- .../humhub/modules/space/widgets/Menu.php | 39 +-- .../modules/ui/menu/DropdownDivider.php | 38 +++ .../humhub/modules/ui/menu/MenuEntry.php | 292 ++++++------------ protected/humhub/modules/ui/menu/MenuLink.php | 274 ++++++++++++++++ .../{DropDownMenu.php => DropdownMenu.php} | 15 +- .../humhub/modules/ui/menu/widgets/Menu.php | 113 +++++-- .../modules/ui/menu/widgets/SubTabMenu.php | 12 +- .../modules/ui/menu/widgets/TabMenu.php | 26 ++ .../ui/menu/widgets/views/dropdown-menu.php | 11 +- .../ui/menu/widgets/views/left-navigation.php | 11 +- .../ui/menu/widgets/views/sub-tab-menu.php | 13 +- .../ui/menu/widgets/views/tab-menu.php | 11 +- .../modules/user/widgets/AccountMenu.php | 76 +++-- .../user/widgets/AccountProfilMenu.php | 57 ++-- .../user/widgets/AccountSettingsMenu.php | 29 +- .../modules/user/widgets/AccountTopMenu.php | 58 ++-- .../modules/user/widgets/ProfileMenu.php | 34 +- .../user/widgets/views/accountTopMenu.php | 36 ++- protected/humhub/widgets/FooterMenu.php | 1 - .../humhub/widgets/views/topNavigation.php | 4 +- static/js/humhub/humhub.ui.navigation.js | 6 +- themes/HumHub/css/theme.css | 2 +- 42 files changed, 1077 insertions(+), 752 deletions(-) create mode 100644 protected/humhub/modules/ui/menu/DropdownDivider.php create mode 100644 protected/humhub/modules/ui/menu/MenuLink.php rename protected/humhub/modules/ui/menu/widgets/{DropDownMenu.php => DropdownMenu.php} (66%) diff --git a/composer.json b/composer.json index 7e8e5ecc1e..5b3799a75e 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,7 @@ "require": { "php": ">=5.6.0", "npm-asset/animate.css": "*", - "npm-asset/jquery-autosize": "1.*", + "npm-asset/jquery-autosize": "1.*", "npm-asset/bluebird": "^3.3.5", "npm-asset/blueimp-file-upload": "9.24.*", "npm-asset/bootstrap-markdown": "2.10.*", diff --git a/protected/humhub/libs/Html.php b/protected/humhub/libs/Html.php index a41c4163b0..827044b8de 100644 --- a/protected/humhub/libs/Html.php +++ b/protected/humhub/libs/Html.php @@ -109,4 +109,9 @@ class Html extends \yii\bootstrap\Html throw new InvalidArgumentException('Content container type not supported!'); } } + + public static function addPjaxPrevention(&$options) + { + $options['data-pjax-prevent'] = 1; + } } diff --git a/protected/humhub/modules/admin/widgets/AdminMenu.php b/protected/humhub/modules/admin/widgets/AdminMenu.php index 17293d2e3a..0094e6d24f 100644 --- a/protected/humhub/modules/admin/widgets/AdminMenu.php +++ b/protected/humhub/modules/admin/widgets/AdminMenu.php @@ -8,10 +8,15 @@ namespace humhub\modules\admin\widgets; -use humhub\modules\ui\icon\widgets\Icon; -use humhub\modules\ui\menu\MenuEntry; -use humhub\modules\ui\menu\widgets\LeftNavigation; use Yii; +use humhub\modules\admin\permissions\ManageModules; +use humhub\modules\admin\permissions\ManageSpaces; +use humhub\modules\admin\permissions\SeeAdminInformation; +use humhub\modules\ui\menu\MenuLink; +use humhub\modules\ui\menu\widgets\LeftNavigation; +use humhub\modules\admin\permissions\ManageUsers; +use humhub\modules\admin\permissions\ManageSettings; +use humhub\modules\admin\permissions\ManageGroups; /** * AdminMenu @@ -33,57 +38,57 @@ class AdminMenu extends LeftNavigation { $this->panelTitle = Yii::t('AdminModule.widgets_AdminMenuWidget', 'Administration menu'); - $entry = new MenuEntry(); - $entry->setLabel(Yii::t('AdminModule.widgets_AdminMenuWidget', 'Users')); - $entry->setUrl(['/admin/user']); - $entry->setIcon('user'); - $entry->setSortOrder(200); - $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && (Yii::$app->controller->id == 'user' || Yii::$app->controller->id == 'group' || Yii::$app->controller->id == 'approval' || Yii::$app->controller->id == 'authentication' || Yii::$app->controller->id == 'user-profile' || Yii::$app->controller->id == 'pending-registrations'))); - $entry->setIsVisible(Yii::$app->user->can([ - new \humhub\modules\admin\permissions\ManageUsers(), - new \humhub\modules\admin\permissions\ManageSettings(), - new \humhub\modules\admin\permissions\ManageGroups() + $this->addEntry(new MenuLink([ + 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'Users'), + 'url' => ['/admin/user'], + 'icon' => 'user', + 'sortOrder' => 200, + 'isActive' => MenuLink::isActiveState('admin', ['user', 'group', 'approval', 'authentication', 'user-profile', 'pending-registrations']), + 'isVisible' => Yii::$app->user->can([ + ManageUsers::class, + ManageSettings::class, + ManageGroups::class + ]) ])); - $this->addEntry($entry); - $entry = new MenuEntry(); - $entry->setLabel(Yii::t('AdminModule.widgets_AdminMenuWidget', 'Spaces')); - $entry->setUrl(['/admin/space']); - $entry->setIcon('inbox'); - $entry->setSortOrder(400); - $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'space')); - $entry->setIsVisible(Yii::$app->user->can([ - new \humhub\modules\admin\permissions\ManageSpaces(), - new \humhub\modules\admin\permissions\ManageSettings(), + $this->addEntry(new MenuLink([ + 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'Spaces'), + 'url' => ['/admin/space'], + 'icon' => 'inbox', + 'sortOrder' => 400, + 'isActive' => MenuLink::isActiveState('admin', 'space'), + 'isVisible' => Yii::$app->user->can([ + ManageSpaces::class, + ManageSettings::class + ]) ])); - $this->addEntry($entry); - $entry = new MenuEntry(); - $entry->setLabel(Yii::t('AdminModule.widgets_AdminMenuWidget', 'Modules')); - $entry->setUrl(['/admin/module']); - $entry->setIcon('rocket'); - $entry->setSortOrder(500); - $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'module')); - $entry->setIsVisible(Yii::$app->user->can(new \humhub\modules\admin\permissions\ManageModules())); - $this->addEntry($entry); + $this->addEntry(new MenuLink([ + 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'Modules'), + 'url' => ['/admin/module'], + 'icon' => 'rocket', + 'sortOrder' => 500, + 'isActive' => MenuLink::isActiveState('admin', 'module'), + 'isVisible' => Yii::$app->user->can(ManageModules::class) + ])); - $entry = new MenuEntry(); - $entry->setLabel(Yii::t('AdminModule.widgets_AdminMenuWidget', 'Settings')); - $entry->setUrl(['/admin/setting']); - $entry->setIcon('gears'); - $entry->setSortOrder(600); - $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id == 'setting')); - $entry->setIsVisible(Yii::$app->user->can(new \humhub\modules\admin\permissions\ManageSettings())); - $this->addEntry($entry); + $this->addEntry(new MenuLink([ + 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'Settings'), + 'url' => ['/admin/setting'], + 'icon' => 'gears', + 'sortOrder' => 600, + 'isActive' => MenuLink::isActiveState('admin', 'setting'), + 'isVisible' => Yii::$app->user->can(ManageSettings::class) + ])); - $entry = new MenuEntry(); - $entry->setLabel(Yii::t('AdminModule.widgets_AdminMenuWidget', 'Information')); - $entry->setUrl(['/admin/information']); - $entry->setIcon('info-circle'); - $entry->setSortOrder(1000); - $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'information')); - $entry->setIsVisible(Yii::$app->user->can(new \humhub\modules\admin\permissions\SeeAdminInformation())); - $this->addEntry($entry); + $this->addEntry(new MenuLink([ + 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'Information'), + 'url' => ['/admin/information'], + 'icon' => 'info-circle', + 'sortOrder' => 1000, + 'isActive' => MenuLink::isActiveState('admin', 'information'), + 'isVisible' => Yii::$app->user->can(SeeAdminInformation::class) + ])); parent::init(); } diff --git a/protected/humhub/modules/admin/widgets/AdvancedSettingMenu.php b/protected/humhub/modules/admin/widgets/AdvancedSettingMenu.php index fb23e88eed..4b654b4e57 100644 --- a/protected/humhub/modules/admin/widgets/AdvancedSettingMenu.php +++ b/protected/humhub/modules/admin/widgets/AdvancedSettingMenu.php @@ -8,6 +8,7 @@ namespace humhub\modules\admin\widgets; +use humhub\modules\ui\menu\MenuLink; use Yii; use yii\helpers\Url; use humhub\modules\ui\menu\widgets\SubTabMenu; @@ -18,72 +19,73 @@ use humhub\modules\ui\menu\widgets\SubTabMenu; class AdvancedSettingMenu extends SubTabMenu { - /** * @inheritdoc */ public function init() { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'Caching'), 'url' => Url::toRoute(['/admin/setting/caching']), - 'icon' => '', + 'icon' => 'dashboard', 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'setting' && Yii::$app->controller->action->id == 'caching'), + 'isActive' => MenuLink::isActiveState('admin', 'setting', 'caching'), 'isVisible' => Yii::$app->user->isAdmin(), - ]); + ])); - $this->addItem([ - 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'Files'), - 'url' => Url::toRoute('/admin/setting/file'), - 'icon' => '', - 'sortOrder' => 200, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'setting' && Yii::$app->controller->action->id == 'file'), - 'isVisible' => Yii::$app->user->isAdmin(), - ]); + $this->addEntry(new MenuLink([ + 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'Files'), + 'url' => Url::toRoute('/admin/setting/file'), + 'icon' => 'file', + 'sortOrder' => 200, + 'isActive' => MenuLink::isActiveState('admin', 'setting', 'file'), + 'isVisible' => Yii::$app->user->isAdmin(), + ])); - $this->addItem([ - 'label' => Yii::t('AdminModule.views_setting_mailing', 'E-Mail'), - 'url' => Url::toRoute(['/admin/setting/mailing-server']), - 'icon' => '', - 'sortOrder' => 250, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'setting' && Yii::$app->controller->action->id == 'mailing-server'), - ]); + $this->addEntry(new MenuLink([ + 'label' => Yii::t('AdminModule.views_setting_mailing', 'E-Mail'), + 'url' => Url::toRoute(['/admin/setting/mailing-server']), + 'icon' => 'envelope', + 'sortOrder' => 250, + 'isActive' => MenuLink::isActiveState('admin', 'setting', 'mailing-server'), + 'isVisible' => Yii::$app->user->isAdmin(), + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'Proxy'), 'url' => Url::toRoute('/admin/setting/proxy'), - 'icon' => '', + 'icon' => 'sitemap', 'sortOrder' => 300, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'setting' && Yii::$app->controller->action->id == 'proxy'), + 'isActive' => MenuLink::isActiveState('admin', 'setting', 'proxy'), 'isVisible' => Yii::$app->user->isAdmin(), - ]); - $this->addItem([ + ])); + + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'Statistics'), 'url' => Url::toRoute('/admin/setting/statistic'), - 'icon' => '', + 'icon' => 'bar-chart-o', 'sortOrder' => 400, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'setting' && Yii::$app->controller->action->id == 'statistic'), + 'isActive' => MenuLink::isActiveState('admin', 'setting', 'statistic'), 'isVisible' => Yii::$app->user->isAdmin(), - ]); + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'OEmbed'), 'url' => Url::toRoute('/admin/setting/oembed'), - 'icon' => '', + 'icon' => 'cloud', 'sortOrder' => 500, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'setting' && (Yii::$app->controller->action->id == 'oembed' || Yii::$app->controller->action->id == 'oembed-edit')), + 'isActive' => MenuLink::isActiveState('admin', 'setting', 'oembed-edit'), 'isVisible' => Yii::$app->user->isAdmin(), - ]); + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'Logs'), 'url' => Url::toRoute('/admin/setting/logs'), - 'icon' => '', + 'icon' => 'terminal', 'sortOrder' => 600, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'setting' && (Yii::$app->controller->action->id == 'logs' || Yii::$app->controller->action->id == 'logs-edit')), + 'isActive' => MenuLink::isActiveState('admin', 'setting', ['logs', 'logs-edit']), 'isVisible' => Yii::$app->user->isAdmin(), - ]); + ])); parent::init(); } diff --git a/protected/humhub/modules/admin/widgets/AuthenticationMenu.php b/protected/humhub/modules/admin/widgets/AuthenticationMenu.php index 8eb53709ab..fba04d6b88 100644 --- a/protected/humhub/modules/admin/widgets/AuthenticationMenu.php +++ b/protected/humhub/modules/admin/widgets/AuthenticationMenu.php @@ -8,6 +8,7 @@ namespace humhub\modules\admin\widgets; +use humhub\modules\ui\menu\MenuLink; use humhub\modules\ui\menu\widgets\SubTabMenu; use Yii; use yii\helpers\Url; @@ -23,18 +24,19 @@ class AuthenticationMenu extends SubTabMenu */ public function init() { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.setting', 'General'), - 'url' => Url::toRoute(['/admin/authentication']), + 'url' => ['/admin/authentication'], 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'authentication' && Yii::$app->controller->action->id == 'index'), - ]); - $this->addItem([ + 'isActive' => MenuLink::isActiveState('admin', 'authentication', 'index'), + ])); + + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.setting', "LDAP"), - 'url' => Url::toRoute(['/admin/authentication/authentication-ldap']), + 'url' => ['/admin/authentication/authentication-ldap'], 'sortOrder' => 200, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'authentication' && Yii::$app->controller->action->id == 'authentication-ldap'), - ]); + 'isActive' => MenuLink::isActiveState('admin', 'authentication', 'authentication-ldap'), + ])); parent::init(); } diff --git a/protected/humhub/modules/admin/widgets/GroupManagerMenu.php b/protected/humhub/modules/admin/widgets/GroupManagerMenu.php index c541e1c3cd..ac50731024 100644 --- a/protected/humhub/modules/admin/widgets/GroupManagerMenu.php +++ b/protected/humhub/modules/admin/widgets/GroupManagerMenu.php @@ -8,9 +8,9 @@ namespace humhub\modules\admin\widgets; -use humhub\modules\ui\menu\widgets\SubTabMenu; use Yii; -use yii\helpers\Url; +use humhub\modules\ui\menu\MenuLink; +use humhub\modules\ui\menu\widgets\SubTabMenu; /** * Group Administration Menu @@ -28,24 +28,27 @@ class GroupManagerMenu extends SubTabMenu */ public function init() { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.user', 'Settings'), - 'url' => Url::toRoute(['/admin/group/edit', 'id' => $this->group->id]), + 'url' => ['/admin/group/edit', 'id' => $this->group->id], 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'group' && Yii::$app->controller->action->id == 'edit'), - ]); - $this->addItem([ + 'isActive' => MenuLink::isActiveState('admin', 'group', 'edit') + ])); + + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.user', "Permissions"), - 'url' => Url::toRoute(['/admin/group/manage-permissions', 'id' => $this->group->id]), + 'url' => ['/admin/group/manage-permissions', 'id' => $this->group->id], 'sortOrder' => 200, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'group' && Yii::$app->controller->action->id == 'manage-permissions'), - ]); - $this->addItem([ + 'isActive' => MenuLink::isActiveState('admin', 'group', 'manage-permissions') + ])); + + + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.user', "Members"), - 'url' => Url::toRoute(['/admin/group/manage-group-users', 'id' => $this->group->id]), + 'url' => ['/admin/group/manage-group-users', 'id' => $this->group->id], 'sortOrder' => 200, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'group' && Yii::$app->controller->action->id == 'manage-group-users'), - ]); + 'isActive' => MenuLink::isActiveState('admin', 'group', 'manage-group-users') + ])); parent::init(); } diff --git a/protected/humhub/modules/admin/widgets/GroupMenu.php b/protected/humhub/modules/admin/widgets/GroupMenu.php index af354059a8..45572210e1 100644 --- a/protected/humhub/modules/admin/widgets/GroupMenu.php +++ b/protected/humhub/modules/admin/widgets/GroupMenu.php @@ -8,6 +8,7 @@ namespace humhub\modules\admin\widgets; +use humhub\modules\ui\menu\MenuLink; use humhub\modules\ui\menu\widgets\SubTabMenu; use Yii; use yii\helpers\Url; @@ -17,19 +18,17 @@ use yii\helpers\Url; */ class GroupMenu extends SubTabMenu { - /** * @inheritdoc */ public function init() { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.views_user_index', 'Overview'), - 'url' => Url::toRoute(['/admin/group/index']), + 'url' => ['/admin/group/index'], 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'group' && Yii::$app->controller->action->id == 'index'), - ]); - + 'isActive' => MenuLink::isActiveState('admin', 'group', 'index'), + ])); parent::init(); } diff --git a/protected/humhub/modules/admin/widgets/InformationMenu.php b/protected/humhub/modules/admin/widgets/InformationMenu.php index 3aec6d7e54..4c3cd7bcf8 100644 --- a/protected/humhub/modules/admin/widgets/InformationMenu.php +++ b/protected/humhub/modules/admin/widgets/InformationMenu.php @@ -8,9 +8,10 @@ namespace humhub\modules\admin\widgets; -use humhub\modules\ui\menu\widgets\TabMenu; use Yii; -use yii\helpers\Url; +use humhub\modules\ui\menu\MenuLink; +use humhub\modules\ui\menu\widgets\TabMenu; + /** * Group Administration Menu @@ -23,40 +24,40 @@ class InformationMenu extends TabMenu */ public function init() { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.information', 'About HumHub'), - 'url' => Url::to(['/admin/information/about']), + 'url' => ['/admin/information/about'], 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'information' && Yii::$app->controller->action->id == 'about'), - ]); + 'isActive' => MenuLink::isActiveState('admin', 'information', 'about') + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.information', 'Prerequisites'), - 'url' => Url::to(['/admin/information/prerequisites']), + 'url' => ['/admin/information/prerequisites'], 'sortOrder' => 200, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'information' && Yii::$app->controller->action->id == 'prerequisites'), - ]); + 'isActive' => MenuLink::isActiveState('admin', 'information', 'prerequisites') + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.information', 'Database'), - 'url' => Url::to(['/admin/information/database']), + 'url' => ['/admin/information/database'], 'sortOrder' => 300, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'information' && Yii::$app->controller->action->id == 'database'), - ]); + 'isActive' => MenuLink::isActiveState('admin', 'information', 'database') + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.information', 'Background Jobs'), - 'url' => Url::to(['/admin/information/background-jobs']), + 'url' => ['/admin/information/background-jobs'], 'sortOrder' => 400, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'information' && Yii::$app->controller->action->id == 'background-jobs'), - ]); + 'isActive' => MenuLink::isActiveState('admin', 'information', 'background-jobs') + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.information', 'Logging'), - 'url' => Url::toRoute(['/admin/logging']), + 'url' => ['/admin/logging'], 'sortOrder' => 500, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'logging'), - ]); + 'isActive' => MenuLink::isActiveState('admin', 'logging') + ])); parent::init(); } diff --git a/protected/humhub/modules/admin/widgets/SettingsMenu.php b/protected/humhub/modules/admin/widgets/SettingsMenu.php index bb4755a313..9dcc738557 100644 --- a/protected/humhub/modules/admin/widgets/SettingsMenu.php +++ b/protected/humhub/modules/admin/widgets/SettingsMenu.php @@ -8,9 +8,10 @@ namespace humhub\modules\admin\widgets; -use humhub\modules\ui\menu\widgets\TabMenu; use Yii; -use yii\helpers\Url; +use humhub\modules\ui\menu\MenuLink; +use humhub\modules\ui\menu\widgets\TabMenu; +use humhub\modules\admin\permissions\ManageSettings; /** * Group Administration Menu @@ -23,46 +24,46 @@ class SettingsMenu extends TabMenu */ public function init() { - $canEditSettings = Yii::$app->user->can(new \humhub\modules\admin\permissions\ManageSettings()); + $canEditSettings = Yii::$app->user->can(ManageSettings::class); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'General'), - 'url' => Url::toRoute('/admin/setting/index'), + 'url' => ['/admin/setting/index'], 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'setting' && Yii::$app->controller->action->id == 'basic'), + 'isActive' => MenuLink::isActiveState('admin', 'setting', 'basic'), 'isVisible' => $canEditSettings - ]); + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'Appearance'), - 'url' => Url::toRoute('/admin/setting/design'), + 'url' => ['/admin/setting/design'], 'sortOrder' => 200, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'setting' && Yii::$app->controller->action->id == 'design'), + 'isActive' => MenuLink::isActiveState('admin', 'setting', 'design'), 'isVisible' => $canEditSettings - ]); + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'E-Mail summaries'), - 'url' => Url::toRoute('/activity/admin/defaults'), + 'url' => ['/activity/admin/defaults'], 'sortOrder' => 300, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'activity' && Yii::$app->controller->id == 'admin' && (Yii::$app->controller->action->id == 'defaults')), + 'isActive' => MenuLink::isActiveState('activity', 'admin', 'defaults'), 'isVisible' => $canEditSettings - ]); + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'Notifications'), - 'url' => Url::toRoute('/notification/admin/defaults'), + 'url' => ['/notification/admin/defaults'], 'sortOrder' => 400, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'notification' && Yii::$app->controller->id == 'admin' && (Yii::$app->controller->action->id == 'defaults')), + 'isActive' => MenuLink::isActiveState('notification', 'admin', 'defaults'), 'isVisible' => $canEditSettings - ]); + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.widgets_AdminMenuWidget', 'Advanced'), - 'url' => Url::toRoute('/admin/setting/advanced'), + 'url' => ['/admin/setting/advanced'], 'sortOrder' => 1000, 'isVisible' => $canEditSettings - ]); + ])); parent::init(); } diff --git a/protected/humhub/modules/admin/widgets/SpaceMenu.php b/protected/humhub/modules/admin/widgets/SpaceMenu.php index aaf7087e57..fa853f8084 100644 --- a/protected/humhub/modules/admin/widgets/SpaceMenu.php +++ b/protected/humhub/modules/admin/widgets/SpaceMenu.php @@ -8,9 +8,9 @@ namespace humhub\modules\admin\widgets; -use humhub\modules\ui\menu\MenuEntry; use Yii; use yii\helpers\Url; +use humhub\modules\ui\menu\MenuLink; use humhub\modules\admin\permissions\ManageSettings; use humhub\modules\admin\permissions\ManageSpaces; use humhub\modules\ui\menu\widgets\TabMenu; @@ -28,21 +28,21 @@ class SpaceMenu extends TabMenu public function init() { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.views_space_index', 'Spaces'), 'url' => Url::toRoute(['/admin/space/index']), 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'space' && Yii::$app->controller->action->id == 'index'), - 'isVisible' => Yii::$app->user->can(new ManageSpaces()) - ]); + 'isActive' => MenuLink::isActiveState('admin', 'space', 'index'), + 'isVisible' => Yii::$app->user->can(ManageSpaces::class) + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.views_space_index', 'Settings'), 'url' => Url::toRoute(['/admin/space/settings']), 'sortOrder' => 200, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'space' && Yii::$app->controller->action->id == 'settings'), - 'isVisible' => Yii::$app->user->can(new ManageSettings()) - ]); + 'isActive' => MenuLink::isActiveState('admin', 'space', 'settings'), + 'isVisible' => Yii::$app->user->can(ManageSettings::class) + ])); parent::init(); } diff --git a/protected/humhub/modules/admin/widgets/UserMenu.php b/protected/humhub/modules/admin/widgets/UserMenu.php index 8f2191bdb4..3f3171254d 100644 --- a/protected/humhub/modules/admin/widgets/UserMenu.php +++ b/protected/humhub/modules/admin/widgets/UserMenu.php @@ -8,13 +8,13 @@ namespace humhub\modules\admin\widgets; +use Yii; use humhub\modules\admin\models\UserApprovalSearch; use humhub\modules\admin\permissions\ManageGroups; use humhub\modules\admin\permissions\ManageSettings; use humhub\modules\admin\permissions\ManageUsers; +use humhub\modules\ui\menu\MenuLink; use humhub\modules\ui\menu\widgets\TabMenu; -use Yii; -use yii\helpers\Url; /** * User Administration Menu @@ -29,60 +29,55 @@ class UserMenu extends TabMenu */ public function init() { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.views_user_index', 'Users'), - 'url' => Url::to(['/admin/user/index']), + 'url' => ['/admin/user/index'], 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && (Yii::$app->controller->id == 'user' || Yii::$app->controller->id == 'pending-registrations')), + 'isActive' => MenuLink::isActiveState('admin', ['user', 'pending-registrations']), 'isVisible' => Yii::$app->user->can([ - new ManageUsers(), - new ManageGroups(), + ManageUsers::class, + ManageGroups::class, ]) - ]); + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.views_user_index', 'Settings'), - 'url' => Url::to(['/admin/authentication']), + 'url' => ['/admin/authentication'], 'sortOrder' => 200, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'authentication'), - 'isVisible' => Yii::$app->user->can([ - new ManageSettings() - ]) - ]); + 'isActive' => MenuLink::isActiveState('admin', 'authentication'), + 'isVisible' => Yii::$app->user->can(ManageSettings::class) + ])); $approvalCount = UserApprovalSearch::getUserApprovalCount(); + if ($approvalCount > 0) { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.user', 'Pending approvals') . ' ' . $approvalCount . '', - 'url' => Url::to(['/admin/approval']), + 'url' => ['/admin/approval'], 'sortOrder' => 300, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'approval'), + 'isActive' => MenuLink::isActiveState('admin', 'approval'), 'isVisible' => Yii::$app->user->can([ - new ManageUsers(), - new ManageGroups() + ManageUsers::class, + ManageGroups::class ]) - ]); + ])); } - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.user', 'Profiles'), - 'url' => Url::to(['/admin/user-profile']), + 'url' => ['/admin/user-profile'], 'sortOrder' => 400, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'user-profile'), - 'isVisible' => Yii::$app->user->can([ - new ManageUsers() - ]) - ]); + 'isActive' => MenuLink::isActiveState('admin', 'user-profile'), + 'isVisible' => Yii::$app->user->can(ManageUsers::class) + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.user', 'Groups'), - 'url' => Url::to(['/admin/group']), + 'url' => ['/admin/group'], 'sortOrder' => 500, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'group'), - 'isVisible' => Yii::$app->user->can( - new ManageGroups() - ) - ]); + 'isActive' => MenuLink::isActiveState('admin', 'group'), + 'isVisible' => Yii::$app->user->can(ManageGroups::class) + ])); parent::init(); } diff --git a/protected/humhub/modules/admin/widgets/UserSettingMenu.php b/protected/humhub/modules/admin/widgets/UserSettingMenu.php index 96c0c85831..3b054c1369 100644 --- a/protected/humhub/modules/admin/widgets/UserSettingMenu.php +++ b/protected/humhub/modules/admin/widgets/UserSettingMenu.php @@ -8,9 +8,9 @@ namespace humhub\modules\admin\widgets; -use humhub\modules\ui\menu\widgets\TabMenu; use Yii; -use yii\helpers\Url; +use humhub\modules\ui\menu\MenuLink; +use humhub\modules\ui\menu\widgets\TabMenu; /** * User Administration Menu @@ -25,18 +25,19 @@ class UserSettingMenu extends TabMenu */ public function init() { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.views_setting_authentication', 'General'), - 'url' => Url::toRoute(['/admin/setting/authentication']), + 'url' => ['/admin/setting/authentication'], 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'settings' && Yii::$app->controller->action->id == 'authentication'), - ]); - $this->addItem([ + 'isActive' => MenuLink::isActiveState('admin', 'settings', 'authentication'), + ])); + + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.views_setting_authentication', 'LDAP'), - 'url' => Url::toRoute(['/admin/setting/authentication-ldap']), + 'url' => ['/admin/setting/authentication-ldap'], 'sortOrder' => 200, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'admin' && Yii::$app->controller->id == 'settings' && Yii::$app->controller->action->id == 'authentication-ldap'), - ]); + 'isActive' => MenuLink::isActiveState('admin', 'settings', 'authentication-ldap'), + ])); parent::init(); } diff --git a/protected/humhub/modules/content/helpers/ContentContainerHelper.php b/protected/humhub/modules/content/helpers/ContentContainerHelper.php index 35d47a9fc7..92c01ae79e 100644 --- a/protected/humhub/modules/content/helpers/ContentContainerHelper.php +++ b/protected/humhub/modules/content/helpers/ContentContainerHelper.php @@ -20,13 +20,14 @@ use humhub\modules\content\components\ContentContainerController; class ContentContainerHelper { /** + * @param string|null $type type filter available since 1.4 * @return ContentContainerActiveRecord|null currently active container from app context. */ - public static function getCurrent() + public static function getCurrent($type = null) { $controller = Yii::$app->controller; if($controller instanceof ContentContainerController) { - return $controller->contentContainer; + return (!$type || get_class($controller->contentContainer) === $type) ? $controller->contentContainer : null; } return null; diff --git a/protected/humhub/modules/dashboard/Events.php b/protected/humhub/modules/dashboard/Events.php index ecd72d500c..05d157ccad 100644 --- a/protected/humhub/modules/dashboard/Events.php +++ b/protected/humhub/modules/dashboard/Events.php @@ -8,7 +8,7 @@ namespace humhub\modules\dashboard; -use humhub\modules\ui\menu\MenuEntry; +use humhub\modules\ui\menu\MenuLink; use humhub\widgets\TopMenu; use Yii; use yii\base\Event; @@ -32,16 +32,14 @@ class Events /** @var TopMenu $topMenu */ $topMenu = $event->sender; - $entry = new MenuEntry(); - - $entry->setId('dashboard'); - $entry->setLabel(Yii::t('DashboardModule.base', 'Dashboard')); - $entry->setUrl(['/dashboard/dashboard']); - $entry->setIcon('tachometer'); - $entry->setSortOrder(100); - $entry->setIsActive((Yii::$app->controller->module && Yii::$app->controller->module->id === 'dashboard')); - - $topMenu->addEntry($entry); + $topMenu->addEntry(new MenuLink([ + 'id' => 'dashboard', + 'label' => Yii::t('DashboardModule.base', 'Dashboard'), + 'url' => ['/dashboard/dashboard'], + 'icon' => 'tachometer', + 'sortOrder' => 100, + 'isActive' => MenuLink::isActiveState('dashboard') + ])); } } diff --git a/protected/humhub/modules/directory/widgets/Menu.php b/protected/humhub/modules/directory/widgets/Menu.php index 4ba05d637a..68c852b2b4 100644 --- a/protected/humhub/modules/directory/widgets/Menu.php +++ b/protected/humhub/modules/directory/widgets/Menu.php @@ -9,7 +9,7 @@ namespace humhub\modules\directory\widgets; use Yii; -use yii\helpers\Url; +use humhub\modules\ui\menu\MenuLink; use humhub\modules\directory\Module; use humhub\modules\ui\menu\widgets\LeftNavigation; @@ -32,44 +32,38 @@ class Menu extends LeftNavigation $this->panelTitle = Yii::t('DirectoryModule.base', 'Directory menu'); if ($module->isGroupListingEnabled()) { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('DirectoryModule.base', 'Groups'), - 'group' => 'directory', - 'url' => Url::to(['/directory/directory/groups']), + 'url' => ['/directory/directory/groups'], 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->action->id == "groups"), - ]); + 'isActive' => MenuLink::isActiveState('directory', 'directory', 'groups') + ])); } - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('DirectoryModule.base', 'Members'), - 'group' => 'directory', - 'url' => Url::to(['/directory/directory/members']), + 'url' => ['/directory/directory/members'], 'sortOrder' => 200, - 'isActive' => (Yii::$app->controller->action->id == "members"), - ]); + 'isActive' => MenuLink::isActiveState('directory', 'directory', 'members') + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('DirectoryModule.base', 'Spaces'), - 'group' => 'directory', - 'url' => Url::to(['/directory/directory/spaces']), + 'url' => ['/directory/directory/spaces'], 'sortOrder' => 300, - 'isActive' => (Yii::$app->controller->action->id == "spaces"), - ]); + 'isActive' => MenuLink::isActiveState('directory', 'directory', 'spaces') + ])); if ($module->showUserProfilePosts) { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('DirectoryModule.base', 'User profile posts'), - 'group' => 'directory', - 'url' => Url::to(['/directory/directory/user-posts']), + 'url' => ['/directory/directory/user-posts'], 'sortOrder' => 400, - 'isActive' => (Yii::$app->controller->action->id == "user-posts"), - ]); + 'isActive' => MenuLink::isActiveState('directory', 'directory', 'user-posts') + ])); } parent::init(); } } - -?> diff --git a/protected/humhub/modules/friendship/widgets/ManageMenu.php b/protected/humhub/modules/friendship/widgets/ManageMenu.php index 31fecb9f2d..edcd89d69b 100644 --- a/protected/humhub/modules/friendship/widgets/ManageMenu.php +++ b/protected/humhub/modules/friendship/widgets/ManageMenu.php @@ -8,9 +8,9 @@ namespace humhub\modules\friendship\widgets; -use humhub\modules\ui\menu\widgets\TabMenu; use Yii; -use yii\helpers\Url; +use humhub\modules\ui\menu\MenuLink; +use humhub\modules\ui\menu\widgets\TabMenu; use humhub\modules\friendship\models\Friendship; /** @@ -30,28 +30,29 @@ class ManageMenu extends TabMenu public function init() { $friendCount = Friendship::getFriendsQuery($this->user)->count(); - $this->addItem([ + + $this->addEntry(new MenuLink([ 'label' => Yii::t('FriendshipModule.base', 'Friends') . ' (' . $friendCount . ')', - 'url' => Url::toRoute(['/friendship/manage/list']), + 'url' => ['/friendship/manage/list'], 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->id == 'manage' && Yii::$app->controller->action->id == 'list'), - ]); + 'isActive' => MenuLink::isActiveState(null, 'manage', 'list') + ])); $receivedRequestsCount = Friendship::getReceivedRequestsQuery($this->user)->count(); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('FriendshipModule.base', 'Requests') . ' (' . $receivedRequestsCount . ')', - 'url' => Url::toRoute(['/friendship/manage/requests']), + 'url' => ['/friendship/manage/requests'], 'sortOrder' => 200, - 'isActive' => (Yii::$app->controller->id == 'manage' && Yii::$app->controller->action->id == 'requests'), - ]); + 'isActive' => MenuLink::isActiveState(null, 'manage', 'requests') + ])); $sentRequestsCount = Friendship::getSentRequestsQuery($this->user)->count(); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('FriendshipModule.base', 'Sent requests') . ' (' . $sentRequestsCount . ')', - 'url' => Url::toRoute(['/friendship/manage/sent-requests']), + 'url' => ['/friendship/manage/sent-requests'], 'sortOrder' => 300, - 'isActive' => (Yii::$app->controller->id == 'manage' && Yii::$app->controller->action->id == 'sent-requests'), - ]); + 'isActive' => MenuLink::isActiveState(null, 'manage', 'sent-requests') + ])); parent::init(); } diff --git a/protected/humhub/modules/space/modules/manage/widgets/DefaultMenu.php b/protected/humhub/modules/space/modules/manage/widgets/DefaultMenu.php index 4a10bc42ef..a74a1798dc 100644 --- a/protected/humhub/modules/space/modules/manage/widgets/DefaultMenu.php +++ b/protected/humhub/modules/space/modules/manage/widgets/DefaultMenu.php @@ -9,6 +9,7 @@ namespace humhub\modules\space\modules\manage\widgets; use Yii; +use humhub\modules\ui\menu\MenuLink; use humhub\modules\ui\menu\widgets\TabMenu; /** @@ -29,19 +30,19 @@ class DefaultMenu extends TabMenu */ public function init() { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.manage', 'Basic'), 'url' => $this->space->createUrl('/space/manage/default/index'), 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->id == 'default' && Yii::$app->controller->action->id == 'index'), - ]); + 'isActive' => MenuLink::isActiveState(null, 'default', 'index') + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.manage', 'Advanced'), 'url' => $this->space->createUrl('/space/manage/default/advanced'), 'sortOrder' => 200, - 'isActive' => (Yii::$app->controller->id == 'default' && Yii::$app->controller->action->id == 'advanced'), - ]); + 'isActive' => MenuLink::isActiveState(null, 'default', 'advanced') + ])); parent::init(); } diff --git a/protected/humhub/modules/space/modules/manage/widgets/MemberMenu.php b/protected/humhub/modules/space/modules/manage/widgets/MemberMenu.php index f31ab50302..f255e2d23a 100644 --- a/protected/humhub/modules/space/modules/manage/widgets/MemberMenu.php +++ b/protected/humhub/modules/space/modules/manage/widgets/MemberMenu.php @@ -9,6 +9,7 @@ namespace humhub\modules\space\modules\manage\widgets; use Yii; +use humhub\modules\ui\menu\MenuLink; use humhub\modules\space\models\Membership; use humhub\modules\space\modules\manage\models\MembershipSearch; use humhub\modules\ui\menu\widgets\TabMenu; @@ -31,37 +32,37 @@ class MemberMenu extends TabMenu public function init() { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('SpaceModule.widgets_SpaceMembersMenu', 'Members'), 'url' => $this->space->createUrl('/space/manage/member/index'), 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->action->id == 'index' && Yii::$app->controller->id === 'member'), - ]); + 'isActive' => MenuLink::isActiveState(null, 'member', 'index') + ])); if ($this->countPendingInvites() != 0) { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('SpaceModule.widgets_SpaceMembersMenu', 'Pending Invites') . '  ' . $this->countPendingInvites() . '', 'url' => $this->space->createUrl('/space/manage/member/pending-invitations'), 'sortOrder' => 200, - 'isActive' => (Yii::$app->controller->action->id == 'pending-invitations'), - ]); + 'isActive' => MenuLink::isActiveState(null, 'member', 'pending-invitations') + ])); } if ($this->countPendingApprovals() != 0) { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('SpaceModule.widgets_SpaceMembersMenu', 'Pending Approvals') . '  ' . $this->countPendingApprovals() . '', 'url' => $this->space->createUrl('/space/manage/member/pending-approvals'), 'sortOrder' => 300, - 'isActive' => (Yii::$app->controller->action->id == 'pending-approvals'), - ]); + 'isActive' => MenuLink::isActiveState(null, 'member', 'pending-approvals') + ])); } if ($this->space->isSpaceOwner()) { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('SpaceModule.widgets_SpaceMembersMenu', 'Owner'), 'url' => $this->space->createUrl('/space/manage/member/change-owner'), 'sortOrder' => 500, - 'isActive' => (Yii::$app->controller->action->id == 'change-owner'), - ]); + 'isActive' => MenuLink::isActiveState(null, 'member', 'change-owner') + ])); } diff --git a/protected/humhub/modules/space/modules/manage/widgets/SecurityTabMenu.php b/protected/humhub/modules/space/modules/manage/widgets/SecurityTabMenu.php index b8f78f40c1..1838f5be54 100644 --- a/protected/humhub/modules/space/modules/manage/widgets/SecurityTabMenu.php +++ b/protected/humhub/modules/space/modules/manage/widgets/SecurityTabMenu.php @@ -8,6 +8,7 @@ namespace humhub\modules\space\modules\manage\widgets; +use humhub\modules\ui\menu\MenuLink; use humhub\modules\ui\menu\widgets\TabMenu; use Yii; @@ -29,19 +30,19 @@ class SecurityTabMenu extends TabMenu */ public function init() { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.manage', 'General'), 'url' => $this->space->createUrl('/space/manage/security'), 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->id == 'security' && Yii::$app->controller->action->id == 'index'), - ]); + 'isActive' => MenuLink::isActiveState(null, 'security', 'index'), + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('AdminModule.manage', 'Permissions'), 'url' => $this->space->createUrl('/space/manage/security/permissions'), 'sortOrder' => 200, - 'isActive' => (Yii::$app->controller->id == 'security' && Yii::$app->controller->action->id == 'permissions'), - ]); + 'isActive' => MenuLink::isActiveState(null, 'security', 'permissions'), + ])); parent::init(); } diff --git a/protected/humhub/modules/space/widgets/HeaderControlsMenu.php b/protected/humhub/modules/space/widgets/HeaderControlsMenu.php index 4e7d0df779..e353040f56 100644 --- a/protected/humhub/modules/space/widgets/HeaderControlsMenu.php +++ b/protected/humhub/modules/space/widgets/HeaderControlsMenu.php @@ -9,7 +9,9 @@ namespace humhub\modules\space\widgets; use humhub\modules\space\models\Space; -use humhub\modules\ui\menu\widgets\DropDownMenu; +use humhub\modules\ui\menu\DropdownDivider; +use humhub\modules\ui\menu\MenuLink; +use humhub\modules\ui\menu\widgets\DropdownMenu; use Yii; /** @@ -19,7 +21,7 @@ use Yii; * @package humhub.modules_core.space.widgets * @since 0.5 */ -class HeaderControlsMenu extends DropDownMenu +class HeaderControlsMenu extends DropdownMenu { /** * @var Space @@ -44,83 +46,74 @@ class HeaderControlsMenu extends DropDownMenu // check user rights if ($this->space->isAdmin()) { - - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('SpaceModule.base', 'Settings'), 'url' => $this->space->createUrl('/space/manage'), - 'icon' => '', - 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->id === 'default'), - ]); + 'icon' => 'cogs', + 'sortOrder' => 100 + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'Security'), 'url' => $this->space->createUrl('/space/manage/security'), - 'icon' => '', + 'icon' => 'lock', 'sortOrder' => 200, - 'isActive' => (Yii::$app->controller->id === 'security'), - ]); + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'Members'), 'url' => $this->space->createUrl('/space/manage/member'), - 'icon' => '', - 'sortOrder' => 200, - 'isActive' => (Yii::$app->controller->id === 'member'), - ]); + 'icon' => 'group', + 'sortOrder' => 300 + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'Modules'), 'url' => $this->space->createUrl('/space/manage/module'), - 'icon' => '', - 'sortOrder' => 300, - 'isActive' => (Yii::$app->controller->id === 'module'), - ]); + 'icon' => 'rocket', + 'sortOrder' => 400, + ])); + + $this->addEntry(new DropdownDivider(['sortOrder' => 500])); } if ($this->space->isMember()) { - $membership = $this->space->getMembership(); if (!$membership->send_notifications) { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'Receive Notifications for new content'), 'url' => $this->space->createUrl('/space/membership/receive-notifications'), - 'icon' => '', - 'sortOrder' => 300, - 'isActive' => (Yii::$app->controller->id === 'module'), + 'icon' => 'bell', + 'sortOrder' => 600, 'htmlOptions' => ['data-method' => 'POST'] - ]); + ])); } else { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'Don\'t receive notifications for new content'), 'url' => $this->space->createUrl('/space/membership/revoke-notifications'), - 'icon' => '', - 'sortOrder' => 300, - 'isActive' => (Yii::$app->controller->id === 'module'), + 'icon' => 'bell-o', + 'sortOrder' => 600, 'htmlOptions' => ['data-method' => 'POST'] - ]); + ])); } if (!$this->space->isSpaceOwner() && $this->space->canLeave()) { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'Cancel Membership'), 'url' => $this->space->createUrl('/space/membership/revoke-membership'), - 'icon' => '', - 'sortOrder' => 300, - 'isActive' => (Yii::$app->controller->id === 'module'), + 'icon' => 'times', + 'sortOrder' => 700, 'htmlOptions' => ['data-method' => 'POST'] - ]); + ])); } if ($membership->show_at_dashboard) { - - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'Hide posts on dashboard'), 'url' => $this->space->createUrl('/space/membership/switch-dashboard-display', ['show' => 0]), - 'icon' => '', - 'sortOrder' => 400, - 'isActive' => (Yii::$app->controller->id === 'module'), + 'icon' => 'eye-slash', + 'sortOrder' => 800, 'htmlOptions' => [ 'data-method' => 'POST', 'class' => 'tt', @@ -128,21 +121,20 @@ class HeaderControlsMenu extends DropDownMenu 'data-placement' => 'left', 'title' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'This option will hide new content from this space at your dashboard') ] - ]); + ])); } else { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'Show posts on dashboard'), 'url' => $this->space->createUrl('/space/membership/switch-dashboard-display', ['show' => 1]), - 'icon' => '', - 'sortOrder' => 400, - 'isActive' => (Yii::$app->controller->id === 'module'), + 'icon' => 'fa-eye', + 'sortOrder' => 800, 'htmlOptions' => ['data-method' => 'POST', 'class' => 'tt', 'data-toggle' => 'tooltip', 'data-placement' => 'left', 'title' => Yii::t('SpaceModule.widgets_SpaceAdminMenuWidget', 'This option will show new content from this space at your dashboard') ] - ]); + ])); } } diff --git a/protected/humhub/modules/space/widgets/Menu.php b/protected/humhub/modules/space/widgets/Menu.php index 6e97f29f0d..fee670a050 100755 --- a/protected/humhub/modules/space/widgets/Menu.php +++ b/protected/humhub/modules/space/widgets/Menu.php @@ -9,7 +9,9 @@ namespace humhub\modules\space\widgets; use humhub\modules\content\components\ContentContainerController; +use humhub\modules\content\helpers\ContentContainerHelper; use humhub\modules\space\models\Space; +use humhub\modules\ui\menu\MenuLink; use humhub\modules\ui\menu\widgets\LeftNavigation; use Yii; use yii\base\Exception; @@ -31,27 +33,25 @@ class Menu extends LeftNavigation */ public function init() { - if ($this->space === null && Yii::$app->controller instanceof ContentContainerController && Yii::$app->controller->contentContainer instanceof Space) { - $this->space = Yii::$app->controller->contentContainer; + if(!$this->space) { + $this->space = ContentContainerHelper::getCurrent(Space::class); } - if ($this->space === null) { + if (!$this->space) { throw new Exception('Could not instance space menu without space!'); } $this->id = 'navigation-menu-space-' . $this->space->getUniqueId(); - $this->panelTitle = Yii::t('SpaceModule.widgets_SpaceMenuWidget', 'Space menu'); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('SpaceModule.widgets_SpaceMenuWidget', 'Stream'), - 'group' => 'modules', 'url' => $this->space->createUrl('/space/space/home'), - 'icon' => '', + 'icon' => 'fa-bars', 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->id == 'space' && (Yii::$app->controller->action->id == 'index' || Yii::$app->controller->action->id == 'home') && Yii::$app->controller->module->id == 'space'), - ]); + 'isActive' => MenuLink::isActiveState('space', 'space', ['index', 'home']), + ])); parent::init(); } @@ -66,10 +66,11 @@ class Menu extends LeftNavigation public static function getAvailablePages() { //Initialize the space Menu to check which active modules have an own page - $moduleItems = (new static())->getItems('modules'); + $entries = (new static())->getEntries(MenuLink::class); $result = []; - foreach ($moduleItems as $moduleItem) { - $result[$moduleItem['url']] = $moduleItem['label']; + foreach ($entries as $entry) { + /* @var $entry MenuLink */ + $result[$entry->getUrl()] = $entry->getLabel(); } return $result; @@ -78,6 +79,7 @@ class Menu extends LeftNavigation /** * Returns space default / homepage * + * @param Space $space * @return string|null the url to redirect or null for default home */ public static function getDefaultPageUrl($space) @@ -89,10 +91,10 @@ class Menu extends LeftNavigation $pages = static::getAvailablePages(); if (isset($pages[$indexUrl])) { return $indexUrl; - } else { - //Either the module was deactivated or url changed - $settings->contentContainer($space)->delete('indexUrl'); } + + //Either the module was deactivated or url changed + $settings->contentContainer($space)->delete('indexUrl'); } return null; @@ -101,6 +103,7 @@ class Menu extends LeftNavigation /** * Returns space default / homepage * + * @param $space Space * @return string|null the url to redirect or null for default home */ public static function getGuestsDefaultPageUrl($space) @@ -112,10 +115,10 @@ class Menu extends LeftNavigation $pages = static::getAvailablePages(); if (isset($pages[$indexUrl])) { return $indexUrl; - } else { - //Either the module was deactivated or url changed - $settings->contentContainer($space)->delete('indexGuestUrl'); } + + //Either the module was deactivated or url changed + $settings->contentContainer($space)->delete('indexGuestUrl'); } return null; diff --git a/protected/humhub/modules/ui/menu/DropdownDivider.php b/protected/humhub/modules/ui/menu/DropdownDivider.php new file mode 100644 index 0000000000..34719ccfc4 --- /dev/null +++ b/protected/humhub/modules/ui/menu/DropdownDivider.php @@ -0,0 +1,38 @@ +addEntry(new DropdownDivider(['sortOrder' => 100]); + * ``` + * + * @since 1.4 + * @see Menu + */ +class DropdownDivider extends MenuEntry +{ + /** + * @inheritdoc + */ + public function render($extraHtmlOptions = []) + { + Html::addCssClass($extraHtmlOptions, 'divider'); + return Html::tag('li', '', $this->getHtmlOptions($extraHtmlOptions)); + } +} diff --git a/protected/humhub/modules/ui/menu/MenuEntry.php b/protected/humhub/modules/ui/menu/MenuEntry.php index 80e61bbbf6..a9ddf41637 100644 --- a/protected/humhub/modules/ui/menu/MenuEntry.php +++ b/protected/humhub/modules/ui/menu/MenuEntry.php @@ -8,143 +8,60 @@ namespace humhub\modules\ui\menu; -use humhub\modules\ui\icon\widgets\Icon; +use humhub\modules\ui\menu\widgets\Menu; +use Yii; use yii\base\BaseObject; use yii\bootstrap\Html; -use yii\helpers\Url; /** * Class MenuEntry * - * A menu entry represents a link inside a navigation. + * An abstract menu entry class. Subclasses need to extend the [[render()]] function. * * @since 1.4 * @see Menu - * @package humhub\modules\ui\widgets */ -class MenuEntry extends BaseObject +abstract class MenuEntry extends BaseObject { /** - * @var string the label of the menu entry + * @var string menu entry identifier (optional) */ - protected $label; - - /** - * @var string|array the url or route - */ - protected $url; - - /** - * @var bool mark this entry as active - */ - protected $isActive = false; - - /** - * @var Icon the icon - */ - protected $icon; + protected $id; /** * @var int the sort order */ protected $sortOrder; - /** - * @var string menu entry identifier (optional) - */ - protected $id; - /** * @var array additional html options for the link HTML tag */ protected $htmlOptions = []; - /** - * @var bool use PJAX link if possible - */ - protected $pjaxEnabled = true; - /** * @var bool */ protected $isVisible = true; /** - * @var string optional badge (e.g. new item count) not supported by all templates + * @var bool mark this entry as active */ - protected $badgeText; + protected $isActive = false; /** - * Renders the link tag for this menu entry + * Renders the entry html, this function should respect [[htmlOptions]] array by calling [[getHtmlOptions()]] and passing + * the $extraHtmlOptions array as for example: * - * @param $htmlOptions array additional html options for the link tag + * ```php + * + * return Html::a($label, $url, $this->getHtmlOptions($extraHtmlOptions)); + * + * ``` + * + * @param array $extraHtmlOptions * @return string the Html link */ - public function renderLinkTag($htmlOptions = []) - { - return Html::a( - $this->getIcon() . ' ' . $this->getLabel(), - $this->getUrl(), - $this->getHtmlOptions($htmlOptions) - ); - } - - /** - * @param $label string the label - */ - public function setLabel($label) - { - $this->label = $label; - } - - /** - * @return string the label - */ - public function getLabel() - { - return $this->label; - } - - /** - * @return Icon the icon - */ - public function getIcon() - { - return $this->icon; - } - - /** - * @param $icon Icon|string the icon instance or icon name - */ - public function setIcon($icon) - { - $this->icon = Icon::get($icon); - } - - /** - * Sets the URL - * - * @param $url array|string - */ - public function setUrl($url) - { - $this->url = $url; - } - - /** - * Returns the URL - * - * @param bool $asString return the URL as string - * @return array|string - */ - public function getUrl($asString = true) - { - if ($asString) { - return Url::to($this->url); - } - - return $this->url; - } + abstract public function render($extraHtmlOptions = []); /** * @return boolean is active @@ -164,18 +81,66 @@ class MenuEntry extends BaseObject /** * @param $state boolean + * @return static */ public function setIsActive($state) { $this->isActive = $state; + return $this; } + /** + * Activates this MenuEntry in case the given moduleId, controllerId and actionId matches the current request. + * @param string $moduleId controller module id + * @param array|string $controllerIds controller id + * @param array|string $actionIds action id + * @return static + */ + public function setIsActiveState($moduleId, $controllerIds = [], $actionIds = []) + { + + $this->isActive = static::isActiveState($moduleId,$controllerIds,$actionIds); + return $this; + } + + public static function isActiveState($moduleId = null, $controllerIds = [], $actionIds = []) + { + if($moduleId && (!Yii::$app->controller->module || Yii::$app->controller->module->id !== $moduleId)) { + return false; + } + + if(empty($controllerIds) && empty($actionIds)) { + return true; + } + + if($controllerIds && !is_array($controllerIds)) { + $controllerIds = [$controllerIds]; + } + + if(!empty($controllerIds) && !in_array(Yii::$app->controller->id, $controllerIds)) { + return false; + } + + if($actionIds && !is_array($actionIds)) { + $actionIds = [$actionIds]; + } + + if(!empty($actionIds) && !in_array(Yii::$app->controller->action->id, $actionIds)) { + return false; + } + + return true; + } + + /** * @param $id string the id + * @return static */ public function setId($id) { $this->id = $id; + return $this; } /** @@ -186,51 +151,48 @@ class MenuEntry extends BaseObject return $this->id; } + /** + * Compares this entry with the given entry + * @param MenuEntry $entry + * @return bool + */ + public function compare(MenuEntry $entry) + { + return !empty($this->getId()) && $this->getId() === $entry->getId(); + } + /** * Returns the Html options for the menu entry link tag. * - * @param $extraOptions array additional options to merge * @return array */ public function getHtmlOptions($extraOptions = []) { $options = $this->htmlOptions; - if (isset($extraOptions['class']) && isset($options['class'])) { + if(isset($extraOptions['class'])) { Html::addCssClass($options, $extraOptions['class']); - } elseif (isset($extraOptions['class'])) { - $options['class'] = $extraOptions['class']; + } + + if(isset($extraOptions['style'])) { + Html::addCssStyle($options, $extraOptions['style']); } if ($this->isActive) { Html::addCssClass($options, 'active'); } - return $options; + return array_merge($extraOptions, $options); } /** * @param array $htmlOptions + * @return static */ public function setHtmlOptions($htmlOptions) { $this->htmlOptions = $htmlOptions; - } - - /** - * @return bool - */ - public function isPjaxEnabled() - { - return $this->pjaxEnabled; - } - - /** - * @param bool $pjaxEnabled - */ - public function setPjaxEnabled($pjaxEnabled) - { - $this->pjaxEnabled = $pjaxEnabled; + return $this; } /** @@ -243,26 +205,12 @@ class MenuEntry extends BaseObject /** * @param bool $isVisible + * @return static */ public function setIsVisible($isVisible) { $this->isVisible = $isVisible; - } - - /** - * @return string - */ - public function getBadgeText() - { - return $this->badgeText; - } - - /** - * @param string $badgeText - */ - public function setBadgeText($badgeText) - { - $this->badgeText = $badgeText; + return $this; } /** @@ -275,75 +223,11 @@ class MenuEntry extends BaseObject /** * @param int $sortOrder + * @return static */ public function setSortOrder($sortOrder) { $this->sortOrder = $sortOrder; + return $this; } - - /** - * Creates MenuEntry by old and deprecated array structure - * - * @deprecated since 1.4 - * @param $item - * @return MenuEntry - */ - public static function createByArray($item) - { - $entry = new static; - - if (isset($item['id'])) { - $entry->id = $item['id']; - } - - if (isset($item['label'])) { - $entry->label = $item['label']; - } - - if (isset($item['icon'])) { - $entry->icon = $item['icon']; - } - - if (isset($item['url'])) { - $entry->url = $item['url']; - } - - if (isset($item['sortOrder'])) { - $entry->sortOrder = $item['sortOrder']; - } - - if (isset($item['isActive'])) { - $entry->isActive = $item['isActive']; - } - - if (isset($item['htmlOptions'])) { - $entry->isActive = $item['htmlOptions']; - } - - return $entry; - } - - /** - * Returns the MenuEntry as array structure - * - * @deprecated since 1.4 - * @return array the menu entry array representation - */ - public function toArray() - { - if (!isset($this->htmlOptions['class'])) { - $this->htmlOptions['class'] = ''; - } - - return [ - 'label' => $this->label, - 'id' => $this->id, - 'icon' => $this->icon, - 'url' => $this->url, - 'sortOrder' => $this->sortOrder, - 'isActive' => $this->isActive, - 'htmlOptions' => $this->htmlOptions - ]; - } - } diff --git a/protected/humhub/modules/ui/menu/MenuLink.php b/protected/humhub/modules/ui/menu/MenuLink.php new file mode 100644 index 0000000000..6e9f45033f --- /dev/null +++ b/protected/humhub/modules/ui/menu/MenuLink.php @@ -0,0 +1,274 @@ +link) { + return $this->link.''; + } + + return Html::a( + $this->getIcon() . ' ' . $this->getLabel(), + $this->getUrl(), + $this->getHtmlOptions($extraHtmlOptions) + ); + } + + public function getHtmlOptions($extraOptions = []) + { + $options = parent::getHtmlOptions($extraOptions); + + if(!$this->pjaxEnabled) { + Html::addPjaxPrevention($options); + } + + return array_merge($extraOptions, $options); + } + + public function compare(MenuEntry $entry) + { + return parent::compare($entry) || ($entry instanceof self && $this->getUrl() === $entry->getUrl()); + } + + /** + * @param $label string the label + * @return static + */ + public function setLabel($label) + { + $this->label = $label; + return $this; + } + + /** + * @return Link + */ + public function getLink() + { + return $this->link; + } + + /** + * @param $link Link the label + * @return static + */ + public function setLink(Link $link) + { + $this->link = $link; + return $this; + } + + /** + * @return string the label + */ + public function getLabel() + { + return $this->label; + } + + /** + * @return Icon the icon + */ + public function getIcon() + { + return $this->icon; + } + + /** + * @param $icon Icon|string the icon instance or icon name + * * @return static + */ + public function setIcon($icon) + { + $this->icon = Icon::get($icon); + return $this; + } + + /** + * Sets the URL + * + * @param $url array|string + * @return static + */ + public function setUrl($url) + { + $this->url = $url; + return $this; + } + + /** + * Returns the URL + * + * @param bool $asString return the URL as string + * @return array|string + */ + public function getUrl($asString = true) + { + if ($asString) { + return Url::to($this->url); + } + + return $this->url; + } + + /** + * @return bool + */ + public function isPjaxEnabled() + { + return $this->pjaxEnabled; + } + + /** + * @param bool $pjaxEnabled + * @return static + */ + public function setPjaxEnabled($pjaxEnabled) + { + $this->pjaxEnabled = $pjaxEnabled; + return $this; + } + + /** + * @return string + */ + public function getBadgeText() + { + return $this->badgeText; + } + + /** + * @param string $badgeText + * @return static + */ + public function setBadgeText($badgeText) + { + $this->badgeText = $badgeText; + return $this; + } + + /** + * Creates MenuEntry by old and deprecated array structure + * + * @deprecated since 1.4 + * @param $item + * @return MenuLink + */ + public static function createByArray($item) + { + $entry = new static; + + if (isset($item['id'])) { + $entry->id = $item['id']; + } + + if (isset($item['label'])) { + $entry->label = $item['label']; + } + + if (isset($item['icon'])) { + $entry->icon = $item['icon']; + } + + if (isset($item['url'])) { + $entry->url = $item['url']; + } + + if (isset($item['sortOrder'])) { + $entry->sortOrder = $item['sortOrder']; + } + + if (isset($item['isActive'])) { + $entry->isActive = $item['isActive']; + } + + if (isset($item['htmlOptions'])) { + $entry->isActive = $item['htmlOptions']; + } + + return $entry; + } + + /** + * Returns the MenuEntry as array structure + * + * @deprecated since 1.4 + * @return array the menu entry array representation + */ + public function toArray() + { + if (!isset($this->htmlOptions['class'])) { + $this->htmlOptions['class'] = ''; + } + + return [ + 'label' => $this->label, + 'id' => $this->id, + 'icon' => $this->icon, + 'url' => $this->url, + 'sortOrder' => $this->sortOrder, + 'isActive' => $this->isActive, + 'htmlOptions' => $this->htmlOptions + ]; + } + +} diff --git a/protected/humhub/modules/ui/menu/widgets/DropDownMenu.php b/protected/humhub/modules/ui/menu/widgets/DropdownMenu.php similarity index 66% rename from protected/humhub/modules/ui/menu/widgets/DropDownMenu.php rename to protected/humhub/modules/ui/menu/widgets/DropdownMenu.php index 3df4d156a0..0760b4d61d 100644 --- a/protected/humhub/modules/ui/menu/widgets/DropDownMenu.php +++ b/protected/humhub/modules/ui/menu/widgets/DropdownMenu.php @@ -9,12 +9,12 @@ namespace humhub\modules\ui\menu\widgets; /** - * Class DropDownMenu + * Class DropdownMenu * * @since 1.4 * @package humhub\modules\ui\menu\widgets */ -abstract class DropDownMenu extends Menu +abstract class DropdownMenu extends Menu { /** * @var string the label of the dropdown button @@ -26,4 +26,15 @@ abstract class DropDownMenu extends Menu */ public $template = '@ui/menu/widgets/views/dropdown-menu.php'; + + /** + * @inheritdoc + */ + public function getAttributes() + { + return [ + 'class' => 'btn-group dropdown-navigation' + ]; + } + } diff --git a/protected/humhub/modules/ui/menu/widgets/Menu.php b/protected/humhub/modules/ui/menu/widgets/Menu.php index c69d92cb52..7d8e71e48a 100644 --- a/protected/humhub/modules/ui/menu/widgets/Menu.php +++ b/protected/humhub/modules/ui/menu/widgets/Menu.php @@ -9,8 +9,9 @@ namespace humhub\modules\ui\menu\widgets; use humhub\components\Event; -use humhub\components\Widget; use humhub\modules\ui\menu\MenuEntry; +use humhub\modules\ui\menu\MenuLink; +use humhub\widgets\JsWidget; use yii\helpers\Url; use yii\web\View; @@ -20,18 +21,18 @@ use yii\web\View; * @since 1.4 * @package humhub\modules\ui\widgets */ -abstract class Menu extends Widget +abstract class Menu extends JsWidget { + /** + * @inheritdocs + */ + public $jsWidget = 'ui.navigation.Navigation'; + /** * @event MenuEvent an event raised before running the navigation widget. */ const EVENT_RUN = 'run'; - /** - * @var string dom element id - */ - public $id; - /** * @var string template view file of the navigation */ @@ -96,18 +97,38 @@ abstract class Menu extends Widget return [ 'menu' => $this, 'entries' => $this->entries, - + 'options' => $this->getOptions(), // Deprecated 'items' => $this->getItems(), 'numItems' => count($this->getItems()) ]; } + /** + * @inheritdoc + */ + public function getData() + { + return [ + 'menu-id' => $this->id + ]; + } + + /** + * @inheritdoc + */ + public function getAttributes() + { + return [ + 'class' => 'panel panel-default left-navigation' + ]; + } + /** * Returns the first entry with the given URL * * @param $url string|array the url or route - * @return MenuEntry + * @return MenuLink */ public function getEntryByUrl($url) { @@ -116,6 +137,10 @@ abstract class Menu extends Widget } foreach ($this->entries as $entry) { + if(!$entry instanceof MenuLink) { + continue; + } + if ($entry->getUrl() === $url) { return $entry; } @@ -143,10 +168,10 @@ abstract class Menu extends Widget * * @param MenuEntry $entry */ - public function setEntryActive($entry) + public function setEntryActive(MenuEntry $entry) { - foreach ($this->entries as $e) { - $e->setIsActive(($entry->getUrl() === $e->getUrl())); + foreach ($this->entries as $currentEntry) { + $currentEntry->setIsActive(($currentEntry->compare($entry))); } } @@ -157,12 +182,12 @@ abstract class Menu extends Widget */ /** - * @deprecated + * @deprecated since 1.4 * @param array $entryArray */ public function addItem($entryArray) { - $entry = MenuEntry::createByArray($entryArray); + $entry = MenuLink::createByArray($entryArray); $this->addEntry($entry); } @@ -176,7 +201,7 @@ abstract class Menu extends Widget } /** - * @deprecated + * @deprecated since 1.4 * @return array the item group */ public function getItemGroups() @@ -187,20 +212,52 @@ abstract class Menu extends Widget } /** - * @deprecated + * @deprecated since 1.4 * @return array the menu items as array list */ public function getItems($group = '') { $items = []; foreach ($this->entries as $entry) { - $items[] = $entry->toArray(); + if($entry instanceof MenuLink) { + $items[] = $entry->toArray(); + } } return $items; } /** - * @deprecated + * Returns all entries filtered by $type. If no $type filter is given all entries + * are returned. + * + * @param null|string $type + * @return MenuEntry[] + */ + public function getEntries($type = null) + { + $result = []; + foreach ($this->entries as $entry) { + if(!$type || get_class($entry) === $type || is_subclass_of($entry, $type)) { + $result[] = $entry; + } + } + + return $result; + } + + /** + * Checks if this menu contains multiple entries of the given $type, or at all if no $type filter is given. + * + * @param null $type + * @return bool + */ + public function hasMultipleEntries($type = null) + { + return count($this->getEntries($type)) > 1; + } + + /** + * @deprecated since 1.4 */ public function setActive($url) { @@ -211,7 +268,7 @@ abstract class Menu extends Widget } /** - * @deprecated + * @deprecated since 1.4 */ public function setInactive($url) { @@ -222,7 +279,7 @@ abstract class Menu extends Widget } /** - * @deprecated + * @deprecated since 1.4 */ public static function markAsActive($url) { @@ -232,7 +289,7 @@ abstract class Menu extends Widget } /** - * @deprecated + * @deprecated since 1.4 */ public static function markAsInactive($url) { @@ -242,19 +299,21 @@ abstract class Menu extends Widget } /** - * @deprecated + * @deprecated since 1.4 * @return array the menu entry as array */ public function getActive() { - $entry = $this->getActiveEntry(); - if ($entry) { - return $entry->toArray(); + $activeEntry = $this->getActiveEntry(); + if ($activeEntry && $activeEntry instanceof MenuLink) { + return $activeEntry->toArray(); } + + return null; } /** - * @deprecated + * @deprecated since 1.4 * @param $url string the URL or route */ public function deleteItemByUrl($url) @@ -266,7 +325,7 @@ abstract class Menu extends Widget } /** - * @deprecated + * @deprecated since 1.4 */ public static function setViewState() { diff --git a/protected/humhub/modules/ui/menu/widgets/SubTabMenu.php b/protected/humhub/modules/ui/menu/widgets/SubTabMenu.php index d034f2c752..f0461fd1fd 100644 --- a/protected/humhub/modules/ui/menu/widgets/SubTabMenu.php +++ b/protected/humhub/modules/ui/menu/widgets/SubTabMenu.php @@ -14,7 +14,7 @@ namespace humhub\modules\ui\menu\widgets; * @sicne 1.4 * @package humhub\modules\ui\menu\widgets */ -abstract class SubTabMenu extends Menu +abstract class SubTabMenu extends TabMenu { /** * @var string the title of the panel @@ -26,4 +26,14 @@ abstract class SubTabMenu extends Menu */ public $template = '@ui/menu/widgets/views/sub-tab-menu.php'; + /** + * @inheritdoc + */ + public function getAttributes() + { + return [ + 'class' => 'nav nav-tabs tab-sub-menu' + ]; + } + } diff --git a/protected/humhub/modules/ui/menu/widgets/TabMenu.php b/protected/humhub/modules/ui/menu/widgets/TabMenu.php index 32cc253e79..316e5b5c35 100644 --- a/protected/humhub/modules/ui/menu/widgets/TabMenu.php +++ b/protected/humhub/modules/ui/menu/widgets/TabMenu.php @@ -8,6 +8,8 @@ namespace humhub\modules\ui\menu\widgets; +use humhub\modules\ui\menu\MenuLink; + /** * Class TabMenu * @@ -21,4 +23,28 @@ abstract class TabMenu extends Menu */ public $template = '@ui/menu/widgets/views/tab-menu.php'; + /** + * @var bool whether or not to skip rendering if only one menu link is given + */ + public $renderSingleTab = false; + + public function render($view, $params = []) + { + if(!$this->renderSingleTab && !$this->hasMultipleEntries(MenuLink::class)) { + return ''; + } + + return parent::render($view, $params); + } + + /** + * @inheritdoc + */ + public function getAttributes() + { + return [ + 'class' => 'tab-menu' + ]; + } + } diff --git a/protected/humhub/modules/ui/menu/widgets/views/dropdown-menu.php b/protected/humhub/modules/ui/menu/widgets/views/dropdown-menu.php index 2409b17586..46d20b61ce 100644 --- a/protected/humhub/modules/ui/menu/widgets/views/dropdown-menu.php +++ b/protected/humhub/modules/ui/menu/widgets/views/dropdown-menu.php @@ -1,11 +1,14 @@ - + \ No newline at end of file diff --git a/protected/humhub/modules/ui/menu/widgets/views/left-navigation.php b/protected/humhub/modules/ui/menu/widgets/views/left-navigation.php index ace9c0e480..e36374665f 100644 --- a/protected/humhub/modules/ui/menu/widgets/views/left-navigation.php +++ b/protected/humhub/modules/ui/menu/widgets/views/left-navigation.php @@ -1,20 +1,21 @@ -
    - + panelTitle)) : ?>
    panelTitle; ?>
    - renderLinkTag(['class' => 'list-group-item']) ?> + render(['class' => 'list-group-item']) ?>
    - -
    + diff --git a/protected/humhub/modules/ui/menu/widgets/views/sub-tab-menu.php b/protected/humhub/modules/ui/menu/widgets/views/sub-tab-menu.php index f7673d0a38..4a5a9598c5 100644 --- a/protected/humhub/modules/ui/menu/widgets/views/sub-tab-menu.php +++ b/protected/humhub/modules/ui/menu/widgets/views/sub-tab-menu.php @@ -1,14 +1,17 @@ - + diff --git a/protected/humhub/modules/ui/menu/widgets/views/tab-menu.php b/protected/humhub/modules/ui/menu/widgets/views/tab-menu.php index 2d2d35b270..936076a35d 100644 --- a/protected/humhub/modules/ui/menu/widgets/views/tab-menu.php +++ b/protected/humhub/modules/ui/menu/widgets/views/tab-menu.php @@ -1,16 +1,19 @@ -
    + -
    + diff --git a/protected/humhub/modules/user/widgets/AccountMenu.php b/protected/humhub/modules/user/widgets/AccountMenu.php index a8f8b9b350..1b8fa2cefd 100644 --- a/protected/humhub/modules/user/widgets/AccountMenu.php +++ b/protected/humhub/modules/user/widgets/AccountMenu.php @@ -8,9 +8,9 @@ namespace humhub\modules\user\widgets; -use humhub\modules\ui\menu\widgets\LeftNavigation; use Yii; -use yii\helpers\Url; +use humhub\modules\ui\menu\MenuLink; +use humhub\modules\ui\menu\widgets\LeftNavigation; /** * AccountMenuWidget as (usally left) navigation on users account options. @@ -27,64 +27,58 @@ class AccountMenu extends LeftNavigation */ public function init() { - - $controllerAction = Yii::$app->controller->action->id; $this->panelTitle = Yii::t('UserModule.widgets_AccountMenuWidget', 'Account settings'); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('UserModule.widgets_AccountMenuWidget', 'Profile'), - 'icon' => '', - 'url' => Url::toRoute('/user/account/edit'), + 'icon' => 'user', + 'url' => ['/user/account/edit'], 'sortOrder' => 100, - 'isActive' => ($controllerAction == "edit" || $controllerAction == "change-email" || $controllerAction == "change-password" || $controllerAction == "delete"), - ]); + 'isActive' => MenuLink::isActiveState('user', 'account', ['edit', 'change-email', 'change-password', 'delete']) + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('UserModule.account', 'E-Mail Summaries'), - 'icon' => '', - 'url' => Url::toRoute('/activity/user'), + 'icon' => 'envelope', + 'url' => ['/activity/user'], 'sortOrder' => 105, - 'isActive' => (Yii::$app->controller->module->id == 'activity'), - ]); + 'isActive' => MenuLink::isActiveState('activity') + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('UserModule.account', 'Notifications'), - 'icon' => '', - 'url' => Url::toRoute('/notification/user'), + 'icon' => 'bell', + 'url' => ['/notification/user'], 'sortOrder' => 106, - 'isActive' => (Yii::$app->controller->module->id == 'notification'), - ]); + 'isActive' => MenuLink::isActiveState('notification') + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('UserModule.widgets_AccountMenuWidget', 'Settings'), - 'icon' => '', - 'url' => Url::toRoute('/user/account/edit-settings'), + 'icon' => 'wrench', + 'url' => ['/user/account/edit-settings'], 'sortOrder' => 110, - 'isActive' => ($controllerAction == "edit-settings"), - ]); + 'isActive' => MenuLink::isActiveState('user', 'account', 'edit-settings') + ])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('UserModule.widgets_AccountMenuWidget', 'Security'), - 'icon' => '', - 'url' => Url::toRoute('/user/account/security'), + 'icon' => 'lock', + 'url' => ['/user/account/security'], 'sortOrder' => 115, - 'isActive' => (Yii::$app->controller->action->id == "security"), - ]); + 'isActive' => MenuLink::isActiveState('user', 'account', 'security') + ])); - // Only show this page when really user specific modules available - if (count(Yii::$app->user->getIdentity()->getAvailableModules()) != 0) { - $this->addItem([ - 'label' => Yii::t('UserModule.widgets_AccountMenuWidget', 'Modules'), - 'icon' => '', - 'url' => Url::toRoute('//user/account/edit-modules'), - 'sortOrder' => 120, - 'isActive' => (Yii::$app->controller->action->id == "edit-modules"), - ]); - } + $this->addEntry(new MenuLink([ + 'label' => Yii::t('UserModule.widgets_AccountMenuWidget', 'Modules'), + 'icon' => 'rocket', + 'url' => ['/user/account/edit-modules'], + 'sortOrder' => 120, + 'isActive' => MenuLink::isActiveState('user', 'account', 'edit-modules'), + 'isVisible' => (count(Yii::$app->user->getIdentity()->getAvailableModules()) !== 0) + ])); parent::init(); } } - -?> diff --git a/protected/humhub/modules/user/widgets/AccountProfilMenu.php b/protected/humhub/modules/user/widgets/AccountProfilMenu.php index e45c686fcf..5a54c409c9 100644 --- a/protected/humhub/modules/user/widgets/AccountProfilMenu.php +++ b/protected/humhub/modules/user/widgets/AccountProfilMenu.php @@ -8,9 +8,9 @@ namespace humhub\modules\user\widgets; -use humhub\modules\ui\menu\widgets\TabMenu; use Yii; -use yii\helpers\Url; +use humhub\modules\ui\menu\MenuLink; +use humhub\modules\ui\menu\widgets\TabMenu; /** * Account Settings Tab Menu @@ -23,39 +23,36 @@ class AccountProfilMenu extends TabMenu */ public function init() { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('UserModule.base', 'General'), - 'url' => Url::toRoute(['/user/account/edit']), + 'url' => ['/user/account/edit'], 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'user' && Yii::$app->controller->id == 'account' && Yii::$app->controller->action->id == 'edit'), - ]); + 'isActive' => MenuLink::isActiveState('user', 'account', 'edit') + ])); - if (Yii::$app->user->canChangeEmail()) { - $this->addItem([ - 'label' => Yii::t('UserModule.base', 'Change Email'), - 'url' => Url::toRoute(['/user/account/change-email']), - 'sortOrder' => 200, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'user' && Yii::$app->controller->id == 'account' && (Yii::$app->controller->action->id == 'change-email' || Yii::$app->controller->action->id == 'change-email-validate')), - ]); - } + $this->addEntry(new MenuLink([ + 'label' => Yii::t('UserModule.base', 'Change Email'), + 'url' => ['/user/account/change-email'], + 'sortOrder' => 200, + 'isActive' => MenuLink::isActiveState('user', 'account', ['change-email', 'change-email-validate']), + 'isVisible' => Yii::$app->user->canChangeEmail() + ])); - if (Yii::$app->user->canChangePassword()) { - $this->addItem([ - 'label' => Yii::t('UserModule.base', 'Change Password'), - 'url' => Url::toRoute(['/user/account/change-password']), - 'sortOrder' => 300, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'user' && Yii::$app->controller->id == 'account' && Yii::$app->controller->action->id == 'change-password'), - ]); - } + $this->addEntry(new MenuLink([ + 'label' => Yii::t('UserModule.base', 'Change Password'), + 'url' => ['/user/account/change-password'], + 'sortOrder' => 300, + 'isActive' => MenuLink::isActiveState('user', 'account', 'change-password'), + 'isVisible' => Yii::$app->user->canChangePassword() + ])); - if (Yii::$app->user->canDeleteAccount()) { - $this->addItem([ - 'label' => Yii::t('UserModule.base', 'Delete Account'), - 'url' => Url::toRoute(['/user/account/delete']), - 'sortOrder' => 400, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'user' && Yii::$app->controller->id == 'account' && Yii::$app->controller->action->id == 'delete'), - ]); - } + $this->addEntry(new MenuLink([ + 'label' => Yii::t('UserModule.base', 'Delete Account'), + 'url' => ['/user/account/delete'], + 'sortOrder' => 400, + 'isActive' => MenuLink::isActiveState('user', 'account', 'delete'), + 'isVisible' => Yii::$app->user->canDeleteAccount() + ])); parent::init(); } diff --git a/protected/humhub/modules/user/widgets/AccountSettingsMenu.php b/protected/humhub/modules/user/widgets/AccountSettingsMenu.php index f1fd600beb..a6b7b8adcb 100644 --- a/protected/humhub/modules/user/widgets/AccountSettingsMenu.php +++ b/protected/humhub/modules/user/widgets/AccountSettingsMenu.php @@ -8,9 +8,9 @@ namespace humhub\modules\user\widgets; -use humhub\modules\ui\menu\widgets\TabMenu; use Yii; -use yii\helpers\Url; +use humhub\modules\ui\menu\MenuLink; +use humhub\modules\ui\menu\widgets\TabMenu; /** * Account Settings Tab Menu @@ -20,25 +20,26 @@ class AccountSettingsMenu extends TabMenu /** * @inheritdoc + * @throws \yii\base\InvalidConfigException */ public function init() { - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('UserModule.base', 'Basic Settings'), - 'url' => Url::toRoute(['/user/account/edit-settings']), + 'url' => ['/user/account/edit-settings'], 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'user' && Yii::$app->controller->id == 'account' && Yii::$app->controller->action->id == 'edit-settings'), - ]); + 'isActive' => MenuLink::isActiveState('user', 'account', 'edit-settings') + ])); + + $this->addEntry(new MenuLink([ + 'label' => Yii::t('UserModule.base', 'Connected Accounts'), + 'url' => ['/user/account/connected-accounts'], + 'sortOrder' => 300, + 'isActive' => MenuLink::isActiveState('user', 'account', 'connected-accounts'), + 'isVisible' => count($this->getSecondaryAuthProviders()) !== 0 + ])); - if (count($this->getSecondaryAuthProviders()) != 0) { - $this->addItem([ - 'label' => Yii::t('UserModule.base', 'Connected Accounts'), - 'url' => Url::toRoute(['/user/account/connected-accounts']), - 'sortOrder' => 300, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'user' && Yii::$app->controller->id == 'account' && Yii::$app->controller->action->id == 'connected-accounts'), - ]); - } parent::init(); } diff --git a/protected/humhub/modules/user/widgets/AccountTopMenu.php b/protected/humhub/modules/user/widgets/AccountTopMenu.php index f10cee608a..d008af75f2 100644 --- a/protected/humhub/modules/user/widgets/AccountTopMenu.php +++ b/protected/humhub/modules/user/widgets/AccountTopMenu.php @@ -8,9 +8,12 @@ namespace humhub\modules\user\widgets; +use humhub\modules\ui\menu\DropdownDivider; +use humhub\modules\ui\menu\MenuLink; use humhub\modules\ui\menu\widgets\Menu; use Yii; use yii\helpers\Url; +use humhub\modules\admin\widgets\AdminMenu; /** * AccountTopMenu Widget @@ -19,6 +22,7 @@ use yii\helpers\Url; */ class AccountTopMenu extends Menu { + public $id = 'account-top-menu'; /** * @var boolean show user name @@ -40,50 +44,54 @@ class AccountTopMenu extends Menu } $user = Yii::$app->user->getIdentity(); - $this->addItem([ + + $this->addEntry(new MenuLink([ 'label' => Yii::t('base', 'My profile'), - 'icon' => '', + 'icon' => 'user', 'url' => $user->createUrl('/user/profile/home'), - 'sortOrder' => 100, - ]); - $this->addItem([ + 'sortOrder' => 100])); + + $this->addEntry(new MenuLink([ 'label' => Yii::t('base', 'Account settings'), - 'icon' => '', + 'icon' => 'edit', 'url' => Url::toRoute('/user/account/edit'), 'sortOrder' => 200, - ]); + ])); - if (\humhub\modules\admin\widgets\AdminMenu::canAccess()) { - $this->addItem([ - 'label' => '---', - 'url' => '#', - 'sortOrder' => 300, - ]); + if (AdminMenu::canAccess()) { + $this->addEntry(new DropdownDivider(['sortOrder' => 300])); - $this->addItem([ + + $this->addEntry(new MenuLink([ 'label' => Yii::t('base', 'Administration'), - 'icon' => '', + 'icon' => 'cogs', 'url' => Url::toRoute('/admin'), 'sortOrder' => 400, - ]); + ])); } - $this->addItem([ - 'label' => '---', - 'url' => '#', - 'sortOrder' => 600, - ]); + $this->addEntry(new DropdownDivider(['sortOrder' => 600])); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('base', 'Logout'), 'id' => 'account-logout', - 'icon' => '', - 'pjax' => false, + 'icon' => 'sign-out', + 'pjaxEnabled' => false, 'url' => Url::toRoute('/user/auth/logout'), 'sortOrder' => 700, - ]); + ])); parent::init(); } + /** + * @inheritdoc + */ + public function getAttributes() + { + return [ + 'class' => 'nav' + ]; + } + } diff --git a/protected/humhub/modules/user/widgets/ProfileMenu.php b/protected/humhub/modules/user/widgets/ProfileMenu.php index ed36f0aa0c..37fa0ac821 100644 --- a/protected/humhub/modules/user/widgets/ProfileMenu.php +++ b/protected/humhub/modules/user/widgets/ProfileMenu.php @@ -8,10 +8,11 @@ namespace humhub\modules\user\widgets; +use Yii; +use humhub\modules\ui\menu\MenuLink; use humhub\modules\ui\menu\widgets\LeftNavigation; use humhub\modules\user\models\User; use humhub\modules\user\permissions\ViewAboutPage; -use Yii; /** * ProfileMenuWidget shows the (usually left) navigation on user profiles. @@ -42,23 +43,24 @@ class ProfileMenu extends LeftNavigation $this->panelTitle = Yii::t('UserModule.widgets_ProfileMenuWidget', 'Profile menu'); - $this->addItem([ + $this->addEntry(new MenuLink([ 'label' => Yii::t('UserModule.widgets_ProfileMenuWidget', 'Stream'), - 'icon' => '', + 'icon' => 'bars', 'url' => $this->user->createUrl('//user/profile/home'), 'sortOrder' => 200, - 'isActive' => (Yii::$app->controller->id == "profile" && (Yii::$app->controller->action->id == "index" || Yii::$app->controller->action->id == "home")), - ]); + 'isActive' => MenuLink::isActiveState('user', 'profile', ['index', 'home']) + ])); + + + $this->addEntry(new MenuLink([ + 'label' => Yii::t('UserModule.widgets_ProfileMenuWidget', 'About'), + 'icon' => 'info-circle>', + 'url' => $this->user->createUrl('/user/profile/about'), + 'sortOrder' => 300, + 'isActive' => MenuLink::isActiveState('user', 'profile', 'about'), + 'isVisible' => $this->user->permissionManager->can(ViewAboutPage::class) + ])); - if ($this->user->permissionManager->can(new ViewAboutPage())) { - $this->addItem([ - 'label' => Yii::t('UserModule.widgets_ProfileMenuWidget', 'About'), - 'icon' => '', - 'url' => $this->user->createUrl('//user/profile/about'), - 'sortOrder' => 300, - 'isActive' => (Yii::$app->controller->id == "profile" && Yii::$app->controller->action->id == "about"), - ]); - } parent::init(); } @@ -68,12 +70,10 @@ class ProfileMenu extends LeftNavigation public function run() { if (Yii::$app->user->isGuest && $this->user->visibility != User::VISIBILITY_ALL) { - return; + return ''; } return parent::run(); } } - -?> diff --git a/protected/humhub/modules/user/widgets/views/accountTopMenu.php b/protected/humhub/modules/user/widgets/views/accountTopMenu.php index 91160a4203..8dd3c4fd1c 100755 --- a/protected/humhub/modules/user/widgets/views/accountTopMenu.php +++ b/protected/humhub/modules/user/widgets/views/accountTopMenu.php @@ -9,6 +9,12 @@ use humhub\widgets\FooterMenu; use \yii\helpers\Html; use \yii\helpers\Url; +use humhub\modules\user\widgets\Image; + +/* @var $this \humhub\components\View */ +/* @var $menu \humhub\modules\ui\menu\widgets\DropdownMenu */ +/* @var $entries \humhub\modules\ui\menu\MenuEntry[] */ +/* @var $options [] */ /** @var \humhub\modules\user\models\User $userModel */ $userModel = Yii::$app->user->getIdentity(); @@ -22,7 +28,7 @@ $userModel = Yii::$app->user->getIdentity(); - + diff --git a/protected/humhub/widgets/FooterMenu.php b/protected/humhub/widgets/FooterMenu.php index 1c994d5766..2e986b8581 100644 --- a/protected/humhub/widgets/FooterMenu.php +++ b/protected/humhub/widgets/FooterMenu.php @@ -24,7 +24,6 @@ class FooterMenu extends Menu const LOCATION_FULL_PAGE = 'full'; const LOCATION_EMAIL = 'mail'; - /** * @var string location of footer menu (e.g. login, mail, sidebar) */ diff --git a/protected/humhub/widgets/views/topNavigation.php b/protected/humhub/widgets/views/topNavigation.php index 146a5802b3..003c26a516 100755 --- a/protected/humhub/widgets/views/topNavigation.php +++ b/protected/humhub/widgets/views/topNavigation.php @@ -9,7 +9,7 @@ use yii\helpers\Html;
  • - getIcon() . "
    " . $entry->getLabel(), $entry->getUrl(), $entry->getHtmlOptions()); ?> + getIcon() . '
    ' . $entry->getLabel(), $entry->getUrl(), $entry->getHtmlOptions()); ?>
  • @@ -22,7 +22,7 @@ use yii\helpers\Html; diff --git a/static/js/humhub/humhub.ui.navigation.js b/static/js/humhub/humhub.ui.navigation.js index 6c2cee31b1..558b67118d 100644 --- a/static/js/humhub/humhub.ui.navigation.js +++ b/static/js/humhub/humhub.ui.navigation.js @@ -1,6 +1,9 @@ humhub.module('ui.navigation', function (module, require, $) { var event = require('event'); + var Widget = require('ui.widget').Widget; + + var Navigation = Widget.extend(); var init = function () { module.initTopNav(); @@ -54,6 +57,7 @@ humhub.module('ui.navigation', function (module, require, $) { init: init, setActive: setActive, initTopNav: initTopNav, - setActiveItem: setActiveItem + setActiveItem: setActiveItem, + Navigation: Navigation }); }); \ No newline at end of file diff --git a/themes/HumHub/css/theme.css b/themes/HumHub/css/theme.css index 877d4e3e28..45b765a272 100644 --- a/themes/HumHub/css/theme.css +++ b/themes/HumHub/css/theme.css @@ -1 +1 @@ -.colorDefault{color:#ededed}.backgroundDefault{background:#ededed}.borderDefault{border-color:#ededed}.colorPrimary{color:#708fa0 !important}.backgroundPrimary{background:#708fa0 !important}.borderPrimary{border-color:#708fa0 !important}.colorInfo{color:#6fdbe8 !important}.backgroundInfo{background:#6fdbe8 !important}.borderInfo{border-color:#6fdbe8 !important}.colorSuccess{color:#97d271 !important}.backgroundSuccess{background:#97d271 !important}.borderSuccess{border-color:#97d271 !important}.colorWarning{color:#fdd198 !important}.backgroundWarning{background:#fdd198 !important}.borderWarning{border-color:#fdd198 !important}.colorDanger{color:#ff8989 !important}.backgroundDanger{background:#ff8989 !important}.borderDanger{border-color:#ff8989 !important}.colorFont1{color:#bac2c7 !important}.colorFont2{color:#7a7a7a !important}.colorFont3{color:#555 !important}.colorFont4{color:#bebebe !important}.colorFont5{color:#aeaeae !important}.heading{font-size:16px;font-weight:300;color:#555;background-color:white;border:none;padding:10px}.text-center{text-align:center !important}.text-break{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.img-rounded{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body{padding-top:130px;background-color:#ededed;color:#777;font-family:'Open Sans',sans-serif}body a,body a:hover,body a:focus,body a:active,body a.active{color:#555;text-decoration:none}@media (max-width:920px){body{padding-top:115px}}@media (min-width:768px) and (max-width:920px){body{padding-top:120px}}a:hover{text-decoration:none}hr{margin-top:10px;margin-bottom:10px}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{position:inherit}.layout-content-container,.layout-nav-container{padding:0 10px 0 15px}.layout-sidebar-container{padding:0 15px 0 5px}@media (max-width:768px){.layout-nav-container .left-navigation{margin-bottom:0px}.layout-nav-container,.layout-content-container{padding:0px 15px}}@media (min-width:768px) and (max-width:920px){#topbar-first .container,#topbar-second .container{padding-left:10px;padding-right:20px}}h4{font-weight:300;font-size:150%}input[type=text],input[type=password],input[type=select]{-webkit-appearance:none;-moz-appearance:none;appearance:none}.powered,.powered a{color:#b8c7d3 !important}.langSwitcher{display:inline-block}[data-ui-show-more]{overflow:hidden}.topbar{position:fixed;display:block;height:50px;width:100%;padding-left:15px;padding-right:15px}.topbar ul.nav{float:left}.topbar ul.nav>li{float:left}.topbar ul.nav>li>a{padding-top:15px;padding-bottom:15px;line-height:20px}.topbar .dropdown-footer{margin:10px}.topbar .dropdown-header{font-size:16px;padding:3px 10px;margin-bottom:10px;font-weight:300;color:#bebebe}.topbar .dropdown-header .dropdown-header-link{position:absolute;top:2px;right:10px}.topbar .dropdown-header .dropdown-header-link a{color:#6fdbe8 !important;font-size:12px;font-weight:normal}.topbar .dropdown-header:hover{color:#bebebe}#topbar-first{background-color:#708fa0;top:0;z-index:1030;color:white}#topbar-first .nav>li>a:hover,#topbar-first .nav>.open>a{background-color:#8fa7b4}#topbar-first .nav>.account{height:50px;margin-left:20px}#topbar-first .nav>.account img{margin-left:10px}#topbar-first .nav>.account .dropdown-toggle{padding:10px 5px 8px;line-height:1.1em;text-align:left}#topbar-first .nav>.account .dropdown-toggle span{font-size:12px}#topbar-first .topbar-brand{position:relative;z-index:2}#topbar-first .topbar-actions{position:relative;z-index:3}#topbar-first .notifications{position:absolute;left:0;right:0;text-align:center;z-index:1}#topbar-first .notifications .btn-group{position:relative;text-align:left}#topbar-first .notifications .btn-group>a{padding:5px 10px;margin:10px 2px;display:inline-block;border-radius:2px;text-decoration:none;text-align:left}#topbar-first .notifications .btn-group>.label{position:absolute;top:4px;right:-2px}#topbar-first .notifications .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;border-width:10px;content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff;z-index:1035}#topbar-first .notifications .arrow{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;z-index:1001;border-width:11px;left:50%;margin-left:-18px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.15);top:-19px;z-index:1035}#topbar-first .notifications .dropdown-menu{width:350px;margin-left:-148px}#topbar-first .notifications .dropdown-menu ul.media-list{max-height:400px;overflow:auto}#topbar-first .notifications .dropdown-menu li{position:relative}#topbar-first .notifications .dropdown-menu li i.approval{position:absolute;left:2px;top:36px;font-size:14px}#topbar-first .notifications .dropdown-menu li i.accepted{color:#5cb85c}#topbar-first .notifications .dropdown-menu li i.declined{color:#d9534f}#topbar-first .notifications .dropdown-menu li .media{position:relative}#topbar-first .notifications .dropdown-menu li .media .img-space{position:absolute;top:14px;left:14px}#topbar-first .dropdown-footer{margin:10px 10px 5px}#topbar-first a{color:white}#topbar-first .caret{border-top-color:#bebebe}#topbar-first .btn-group>a{background-color:#7f9baa}#topbar-first .btn-enter{background-color:#7f9baa;margin:6px 0}#topbar-first .btn-enter:hover{background-color:#89a2b0}#topbar-first .media-list a{color:#555;padding:0}#topbar-first .media-list li{color:#555}#topbar-first .media-list li i.accepted{color:#6fdbe8 !important}#topbar-first .media-list li i.declined{color:#ff8989 !important}#topbar-first .media-list li.placeholder{border-bottom:none}#topbar-first .media-list .media .media-body .label{padding:0.1em 0.5em}#topbar-first .account .user-title{text-align:right}#topbar-first .account .user-title span{color:#d7d7d7}#topbar-first .dropdown.account>a,#topbar-first .dropdown.account.open>a,#topbar-first .dropdown.account>a:hover,#topbar-first .dropdown.account.open>a:hover{background-color:#708fa0}#topbar-second{top:50px;background-color:#fff;z-index:1029;background-image:none;-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1);border-bottom:1px solid #d4d4d4}#topbar-second .dropdown-menu{padding-top:0;padding-bottom:0}#topbar-second .dropdown-menu .divider{margin:0}#topbar-second #space-menu-dropdown,#topbar-second #search-menu-dropdown{width:400px}#topbar-second #space-menu-dropdown .media-list,#topbar-second #search-menu-dropdown .media-list{max-height:400px;overflow:auto}@media screen and (max-width:768px){#topbar-second #space-menu-dropdown .media-list,#topbar-second #search-menu-dropdown .media-list{max-height:200px}}#topbar-second #space-menu-dropdown form,#topbar-second #search-menu-dropdown form{margin:10px}#topbar-second #space-menu-dropdown .search-reset,#topbar-second #search-menu-dropdown .search-reset{position:absolute;color:#BFBFBF;margin:7px;top:0px;right:40px;z-index:10;display:none;cursor:pointer}#topbar-second .nav>li>a{padding:7px 13px 0;text-decoration:none;text-shadow:none;font-weight:600;font-size:10px;min-height:50px;text-transform:uppercase;text-align:center}#topbar-second .nav>li>a:hover,#topbar-second .nav>li>a:active,#topbar-second .nav>li>a:focus{border-bottom:3px solid #6fdbe8;background-color:#f7f7f7;color:#555;text-decoration:none}#topbar-second .nav>li>a i{font-size:14px}#topbar-second .nav>li>a .caret{border-top-color:#7a7a7a}#topbar-second .nav>li.active>a{min-height:47px}#topbar-second .nav>li>ul>li>a{border-left:3px solid #fff;background-color:#fff;color:#555}#topbar-second .nav>li>ul>li>a:hover,#topbar-second .nav>li>ul>li>a.active{border-left:3px solid #6fdbe8;background-color:#f7f7f7;color:#555}#topbar-second .nav>li>a#space-menu{padding-right:13px;border-right:1px solid #ededed}#topbar-second .nav>li>a#search-menu{padding-top:15px}#topbar-second .nav>li>a:hover,#topbar-second .nav .open>a,#topbar-second .nav>li.active{border-bottom:3px solid #6fdbe8;background-color:#f7f7f7;color:#555}#topbar-second .nav>li.active>a:hover{border-bottom:none}#topbar-second #space-menu-dropdown li>ul>li>a>.media .media-body p{color:#bebebe;font-size:11px;margin:0;font-weight:400}@media (max-width:767px){.topbar{padding-left:0;padding-right:0}}.login-container{background-color:#708fa0;background-image:linear-gradient(to right, #708fa0 0%, #8fa7b4 50%, #8fa7b4 100%),linear-gradient(to right, #7f9baa 0%, #bdcbd3 51%, #adbfc9 100%);background-size:100% 100%;position:relative;padding-top:40px}.login-container .text{color:#fff;font-size:12px;margin-bottom:15px}.login-container .text a{color:#fff;text-decoration:underline}.login-container .panel a{color:#6fdbe8}.login-container h1,.login-container h2{color:#fff !important}.login-container .panel{box-shadow:0 0 15px #627d92;-moz-box-shadow:0 0 15px #627d92;-webkit-box-shadow:0 0 15px #627d92}.login-container .panel .panel-heading,.login-container .panel .panel-body{padding:15px}.login-container select{color:#555}#account-login-form .form-group{margin-bottom:10px}.dropdown-menu li a{font-size:13px !important;font-weight:600 !important}.dropdown-menu li a i{margin-right:5px;font-size:14px;display:inline-block;width:14px}.dropdown-menu li a:hover,.dropdown-menu li a:visited,.dropdown-menu li a:hover,.dropdown-menu li a:focus{background:none;cursor:pointer}.dropdown-menu li:hover,.dropdown-menu li.selected{color:#555}.dropdown-menu li:first-child{margin-top:3px}.dropdown-menu li:last-child{margin-bottom:3px}.modal .dropdown-menu,.panel .dropdown-menu,.nav-tabs .dropdown-menu{border:1px solid #d7d7d7}.modal .dropdown-menu li.divider,.panel .dropdown-menu li.divider,.nav-tabs .dropdown-menu li.divider{background-color:#f7f7f7;border-bottom:none;margin:9px 1px !important}.modal .dropdown-menu li,.panel .dropdown-menu li,.nav-tabs .dropdown-menu li{border-left:3px solid white}.modal .dropdown-menu li a,.panel .dropdown-menu li a,.nav-tabs .dropdown-menu li a{color:#555;font-size:14px;font-weight:400;padding:4px 15px}.modal .dropdown-menu li a i,.panel .dropdown-menu li a i,.nav-tabs .dropdown-menu li a i{margin-right:5px}.modal .dropdown-menu li a:hover,.panel .dropdown-menu li a:hover,.nav-tabs .dropdown-menu li a:hover{background:none}.modal .dropdown-menu li:hover,.panel .dropdown-menu li:hover,.nav-tabs .dropdown-menu li:hover,.modal .dropdown-menu li.selected,.panel .dropdown-menu li.selected,.nav-tabs .dropdown-menu li.selected{border-left:3px solid #6fdbe8;background-color:#f7f7f7 !important}ul.contextMenu{border:1px solid #d7d7d7}ul.contextMenu li.divider{background-color:#f7f7f7;border-bottom:none;margin:9px 1px !important}ul.contextMenu li{border-left:3px solid white}ul.contextMenu li a{color:#555;font-size:14px;font-weight:400;padding:4px 15px}ul.contextMenu li a i{margin-right:5px}ul.contextMenu li a:hover{background:none}ul.contextMenu li:hover,ul.contextMenu li.selected{border-left:3px solid #6fdbe8;background-color:#f7f7f7 !important}.media-list li{padding:10px;border-bottom:1px solid #eee;position:relative;border-left:3px solid white;font-size:12px}.media-list li a{color:#555}.media-list .badge-space-type{background-color:#f7f7f7;border:1px solid #d7d7d7;color:#b2b2b2;padding:3px 3px 2px 3px}.media-list li.new{border-left:3px solid #f3fcfd;background-color:#f3fcfd}.media-list li:hover,.media-list li.selected{background-color:#f7f7f7;border-left:3px solid #6fdbe8}.media-list li.placeholder{font-size:14px !important;border-bottom:none}.media-list li.placeholder:hover{background:none !important;border-left:3px solid white}.media-left,.media>.pull-left{padding-right:0;margin-right:10px}.media:after{content:'';clear:both;display:block}.media .time{font-size:11px;color:#bebebe}.media .img-space{position:absolute;top:35px;left:35px}.media .media-body{font-size:13px}.media .media-body h4.media-heading{font-size:14px;font-weight:500;color:#555}.media .media-body h4.media-heading a{color:#555}.media .media-body h4.media-heading small,.media .media-body h4.media-heading small a{font-size:11px;color:#bebebe}.media .media-body h4.media-heading .content{margin-right:35px}.media .media-body .content a{word-break:break-all}.media .media-body h5{color:#aeaeae;font-weight:300;margin-top:5px;margin-bottom:5px;min-height:15px}.media .media-body .module-controls{font-size:85%}.media .media-body .module-controls a{color:#6fdbe8}.media .content a{color:#6fdbe8}.media .content .files a{color:#555}.content span{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.panel{border:none;background-color:#fff;box-shadow:0 0 3px #dadada;-webkit-box-shadow:0 0 3px #dadada;-moz-box-shadow:0 0 3px #dadada;border-radius:4px;position:relative;margin-bottom:15px}.panel h1{font-size:16px;font-weight:300;margin-top:0;color:#555}.panel .panel-heading{font-size:16px;font-weight:300;color:#555;background-color:white;border:none;padding:10px;border-radius:4px}.panel .panel-heading .heading-link{color:#6fdbe8 !important;font-size:0.8em}.panel .panel-body{padding:10px;font-size:13px}.panel .panel-body p{color:#555}.panel .statistics .entry{margin-left:20px;font-size:12px}.panel .statistics .entry .count{color:#6fdbe8;font-weight:600;font-size:20px;line-height:0.8em}.panel h3.media-heading small{font-size:75%}.panel h3.media-heading small a{color:#6fdbe8}.panel-danger{border:2px solid #ff8989}.panel-danger .panel-heading{color:#ff8989}.panel-success{border:2px solid #97d271}.panel-success .panel-heading{color:#97d271}.panel-warning{border:2px solid #fdd198}.panel-warning .panel-heading{color:#fdd198}.panel.profile{position:relative}.panel.profile .controls{position:absolute;top:10px;right:10px}.panel.members .panel-body a img,.panel.groups .panel-body a img,.panel.follower .panel-body a img,.panel.spaces .panel-body a img{margin-bottom:5px}.panel-profile .panel-profile-header{position:relative;border:3px solid #fff;border-top-right-radius:3px;border-top-left-radius:3px}.panel-profile .panel-profile-header .img-profile-header-background{border-radius:3px;min-height:110px}.panel-profile .panel-profile-header .img-profile-data{position:absolute;height:100px;width:100%;bottom:0;left:0;padding-left:180px;padding-top:30px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;color:#fff;pointer-events:none;background:-moz-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0,0,0,0)), color-stop(1%, rgba(0,0,0,0)), color-stop(100%, rgba(0,0,0,0.38)));background:-webkit-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);background:-o-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);background:-ms-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);background:linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#94000000', GradientType=0)}.panel-profile .panel-profile-header .img-profile-data h1{font-size:30px;font-weight:100;margin-bottom:7px;color:#fff;max-width:600px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.panel-profile .panel-profile-header .img-profile-data h2{font-size:16px;font-weight:400;margin-top:0}.panel-profile .panel-profile-header .img-profile-data h1.space{font-size:30px;font-weight:700}.panel-profile .panel-profile-header .img-profile-data h2.space{font-size:13px;font-weight:300;max-width:600px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.panel-profile .panel-profile-header .profile-user-photo-container{position:absolute;bottom:-50px;left:15px}.panel-profile .panel-profile-header .profile-user-photo-container .profile-user-photo{border:3px solid #fff;border-radius:5px}.panel-profile .panel-profile-controls{padding-left:160px}.panel.pulse,.panel.fadeIn{-webkit-animation-duration:200ms;-moz-animation-duration:200ms;animation-duration:200ms}@media (max-width:767px){.panel-profile-controls{padding-left:0 !important;padding-top:50px}.panel-profile .panel-profile-header .img-profile-data h1{font-size:20px !important}}.panel-body>.tab-menu{margin-left:-10px;margin-right:-10px}.installer .logo{text-align:center}.installer h2{font-weight:100}.installer .panel{margin-top:50px}.installer .panel h3{margin-top:0}.installer .powered,.installer .powered a{color:#bac2c7 !important;margin-top:10px;font-size:12px}.installer .fa{width:18px}.installer .check-ok{color:#97d271}.installer .check-warning{color:#fdd198}.installer .check-error{color:#ff8989}.installer .prerequisites-list ul{list-style:none;padding-left:15px}.installer .prerequisites-list ul li{padding-bottom:5px}.pagination-container{text-align:center}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{background-color:#708fa0;border-color:#708fa0}.pagination>li>a,.pagination>li>span,.pagination>li>a:hover,.pagination>li>a:active,.pagination>li>a:focus{color:#555;cursor:pointer}.well-small{padding:10px;border-radius:3px}.well{border:none;box-shadow:none;background-color:#ededed;margin-bottom:1px}.well hr{margin:15px 0 10px;border-top:1px solid #d9d9d9}.well table>thead{font-size:11px}.tab-sub-menu{padding-left:10px}.tab-sub-menu li>a:hover,.tab-sub-menu li>a:focus{background-color:#f7f7f7;border-bottom-color:#ddd}.tab-sub-menu li.active>a{background-color:#fff;border-bottom-color:transparent}.tab-menu{padding-top:10px;background-color:#fff}.tab-menu .nav-tabs{padding-left:10px}.tab-menu .nav-tabs li>a{padding-top:12px;border-color:#ddd;border-bottom:1px solid #ddd;background-color:#f7f7f7;max-height:41px;outline:none}.tab-menu .nav-tabs li>a:hover,.tab-menu .nav-tabs li>a:focus{padding-top:10px;border-top:3px solid #ddd}.tab-menu .nav-tabs li>a:hover{background-color:#f7f7f7}.tab-menu .nav-tabs li.active>a,.tab-menu .nav-tabs li.active>a:hover{padding-top:10px;border-top:3px solid #6fdbe8}.tab-menu .nav-tabs li.active>a{background-color:#fff;border-bottom-color:transparent}ul.tab-menu{padding-top:10px;background-color:#fff;padding-left:10px}ul.tab-menu-settings li>a{padding-top:12px;border-color:#ddd;border-bottom:1px solid #ddd;background-color:#f7f7f7;max-height:41px;outline:none}ul.tab-menu-settings li>a:hover,ul.tab-menu-settings li>a:focus{padding-top:10px;border-top:3px solid #ddd !important}ul.tab-menu-settings li>a:hover{background-color:#f7f7f7}ul.tab-menu-settings li.active>a,ul.tab-menu-settings li.active>a:hover,ul.tab-menu-settings li.active>a:focus{padding-top:10px;border-top:3px solid #6fdbe8 !important}ul.tab-menu-settings li.active>a{background-color:#fff;border-bottom-color:transparent !important}.nav-pills .dropdown-menu,.nav-tabs .dropdown-menu,.account .dropdown-menu{background-color:#708fa0;border:none}.nav-pills .dropdown-menu li.divider,.nav-tabs .dropdown-menu li.divider,.account .dropdown-menu li.divider{background-color:#628394;border-bottom:none;margin:9px 1px !important}.nav-pills .dropdown-menu li,.nav-tabs .dropdown-menu li,.account .dropdown-menu li{border-left:3px solid #708fa0}.nav-pills .dropdown-menu li a,.nav-tabs .dropdown-menu li a,.account .dropdown-menu li a{color:white;font-weight:400;font-size:13px;padding:4px 15px}.nav-pills .dropdown-menu li a i,.nav-tabs .dropdown-menu li a i,.account .dropdown-menu li a i{margin-right:5px;font-size:14px;display:inline-block;width:14px}.nav-pills .dropdown-menu li a:hover,.nav-tabs .dropdown-menu li a:hover,.account .dropdown-menu li a:hover,.nav-pills .dropdown-menu li a:visited,.nav-tabs .dropdown-menu li a:visited,.account .dropdown-menu li a:visited,.nav-pills .dropdown-menu li a:hover,.nav-tabs .dropdown-menu li a:hover,.account .dropdown-menu li a:hover,.nav-pills .dropdown-menu li a:focus,.nav-tabs .dropdown-menu li a:focus,.account .dropdown-menu li a:focus{background:none}.nav-pills .dropdown-menu li:hover,.nav-tabs .dropdown-menu li:hover,.account .dropdown-menu li:hover,.nav-pills .dropdown-menu li.selected,.nav-tabs .dropdown-menu li.selected,.account .dropdown-menu li.selected{border-left:3px solid #6fdbe8;color:#fff !important;background-color:#628394 !important}.nav-pills.preferences .dropdown .dropdown-toggle{color:#bebebe}.nav-pills.preferences .dropdown.open .dropdown-toggle,.nav-pills.preferences .dropdown.open .dropdown-toggle:hover{background-color:#708fa0}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{background-color:#708fa0}.nav-tabs{margin-bottom:10px}.list-group a [class^="fa-"],.list-group a [class*=" fa-"]{display:inline-block;width:18px}.nav-pills.preferences{position:absolute;right:10px;top:10px}.nav-pills.preferences .dropdown .dropdown-toggle{padding:2px 10px}.nav-pills.preferences .dropdown.open .dropdown-toggle,.nav-pills.preferences .dropdown.open .dropdown-toggle:hover{color:white}.nav-tabs li{font-weight:600;font-size:12px}.tab-content .tab-pane a{color:#6fdbe8}.tab-content .tab-pane .form-group{margin-bottom:5px}.nav-tabs.tabs-center li{float:none;display:inline-block}.nav-tabs.tabs-small li>a{padding:5px 7px}.nav .caret,.nav .caret:hover,.nav .caret:active{border-top-color:#555;border-bottom-color:#555;height:6.928px}.nav li.dropdown>a:hover .caret,.nav li.dropdown>a:active .caret{border-top-color:#555;border-bottom-color:#555}.nav .open>a .caret,.nav .open>a:hover .caret,.nav .open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{border-color:#ededed;color:#555}.nav .open>a .caret,.nav .open>a:hover .caret,.nav .open>a:focus .caret{color:#555}.footer-nav{filter:opacity(.6);font-size:12px;text-align:center}@media (max-width:991px){.controls-header{text-align:left !important}}.btn{float:none;border:none;-webkit-box-shadow:none;box-shadow:none;-moz-box-shadow:none;background-image:none;text-shadow:none;border-radius:3px;outline:none !important;margin-bottom:0;font-size:14px;font-weight:600;padding:8px 16px}.input.btn{outline:none}.btn-lg{padding:16px 28px}.btn-sm{padding:4px 8px;font-size:12px}.btn-sm i{font-size:14px}.btn-xs{padding:1px 5px;font-size:12px}.btn-default{background:#ededed;color:#7a7a7a !important}.btn-default:hover,.btn-default:focus{background:#e8e8e8;text-decoration:none;color:#7a7a7a}.btn-default:active,.btn-default.active{outline:0;background:#e0e0e0}.btn-default[disabled],.btn-default.disabled{background:#f2f2f2}.btn-default[disabled]:hover,.btn-default.disabled:hover,.btn-default[disabled]:focus,.btn-default.disabled:focus{background:#f2f2f2}.btn-default[disabled]:active,.btn-default.disabled:active,.btn-default[disabled].active,.btn-default.disabled.active{background:#f2f2f2}.btn-primary{background:#708fa0;color:#fff !important}.btn-primary:hover,.btn-primary:focus{background:#628394;text-decoration:none}.btn-primary:active,.btn-primary.active{outline:0;background:#628394 !important}.btn-primary[disabled],.btn-primary.disabled{background:#7f9baa}.btn-primary[disabled]:hover,.btn-primary.disabled:hover,.btn-primary[disabled]:focus,.btn-primary.disabled:focus{background:#7f9baa}.btn-primary[disabled]:active,.btn-primary.disabled:active,.btn-primary[disabled].active,.btn-primary.disabled.active{background:#7f9baa !important}.btn-info{background:#6fdbe8;color:#fff !important}.btn-info:hover,.btn-info:focus{background:#59d6e4 !important;text-decoration:none}.btn-info:active,.btn-info.active{outline:0;background:#59d6e4}.btn-info[disabled],.btn-info.disabled{background:#85e0ec}.btn-info[disabled]:hover,.btn-info.disabled:hover,.btn-info[disabled]:focus,.btn-info.disabled:focus{background:#85e0ec}.btn-info[disabled]:active,.btn-info.disabled:active,.btn-info[disabled].active,.btn-info.disabled.active{background:#85e0ec !important}.btn-danger{background:#ff8989;color:#fff !important}.btn-danger:hover,.btn-danger:focus{background:#ff6f6f;text-decoration:none}.btn-danger:active,.btn-danger.active{outline:0;background:#ff6f6f !important}.btn-danger[disabled],.btn-danger.disabled{background:#ffa3a3}.btn-danger[disabled]:hover,.btn-danger.disabled:hover,.btn-danger[disabled]:focus,.btn-danger.disabled:focus{background:#ffa3a3}.btn-danger[disabled]:active,.btn-danger.disabled:active,.btn-danger[disabled].active,.btn-danger.disabled.active{background:#ffa3a3 !important}.btn-success{background:#97d271;color:#fff !important}.btn-success:hover,.btn-success:focus{background:#89cc5e;text-decoration:none}.btn-success:active,.btn-success.active{outline:0;background:#89cc5e !important}.btn-success[disabled],.btn-success.disabled{background:#a5d884}.btn-success[disabled]:hover,.btn-success.disabled:hover,.btn-success[disabled]:focus,.btn-success.disabled:focus{background:#a5d884}.btn-success[disabled]:active,.btn-success.disabled:active,.btn-success[disabled].active,.btn-success.disabled.active{background:#a5d884 !important}.btn-warning{background:#fdd198;color:#fff !important}.btn-warning:hover,.btn-warning:focus{background:#fdcd8e;text-decoration:none}.btn-warning:active,.btn-warning.active{outline:0;background:#fdcd8e !important}.btn-warning[disabled],.btn-warning.disabled{background:#fddcb1}.btn-warning[disabled]:hover,.btn-warning.disabled:hover,.btn-warning[disabled]:focus,.btn-warning.disabled:focus{background:#fddcb1}.btn-warning[disabled]:active,.btn-warning.disabled:active,.btn-warning[disabled].active,.btn-warning.disabled.active{background:#fddcb1 !important}.radio,.checkbox{margin-top:5px !important;margin-bottom:0}.radio label,.checkbox label{padding-left:10px}.form-control{border:2px solid #ededed;box-shadow:none;min-height:35px}.form-control:focus{border:2px solid #6fdbe8;outline:0;box-shadow:none}.form-control.form-search{border-radius:30px;background-image:url("../img/icon_search16x16.png");background-repeat:no-repeat;background-position:10px 8px;padding-left:34px}.form-group-search{position:relative}.form-group-search .form-button-search{position:absolute;top:4px;right:4px;border-radius:30px}textarea{resize:none;height:1.5em}select.form-control:not([multiple]){-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("../img/select_arrow.png") !important;background-repeat:no-repeat;background-position:right 13px;overflow:hidden}label{font-weight:normal}label.control-label{font-weight:bold}::-webkit-input-placeholder{color:#bebebe !important}::-moz-placeholder{color:#bebebe !important}:-ms-input-placeholder{color:#bebebe !important}input:-moz-placeholder{color:#bebebe !important}.placeholder{padding:10px}input.placeholder,textarea.placeholder{padding:0 0 0 10px;color:#999}.help-block-error{font-size:12px}.hint-block,.help-block:not(.help-block-error){color:#aeaeae !important;font-size:12px}.hint-block:hover,.help-block:not(.help-block-error):hover{color:#7a7a7a !important;font-size:12px}.input-group-addon{border:none}a.input-field-addon{font-size:12px;float:right;margin-top:-10px}a.input-field-addon-sm{font-size:11px;float:right;margin-top:-10px}.timeZoneInputContainer{padding-top:10px}.timeZoneInputContainer~.help-block{margin:0px}.label{text-transform:uppercase}.label{text-transform:uppercase;display:inline-block;padding:3px 5px 4px;font-weight:600;font-size:10px !important;color:white !important;vertical-align:baseline;white-space:nowrap;text-shadow:none}.label-default{background:#ededed;color:#7a7a7a !important}a.label-default:hover{background:#e0e0e0 !important}.label-info{background-color:#6fdbe8}a.label-info:hover{background:#59d6e4 !important}.label-danger{background-color:#ff8989}a.label-danger:hover{background:#ff6f6f !important}.label-success{background-color:#97d271}a.label-success:hover{background:#89cc5e !important}.label-warning{background-color:#fdd198}a.label-warning:hover{background:#fdc67f !important}.regular-checkbox:checked+.regular-checkbox-box{border:2px solid #6fdbe8;background:#6fdbe8;color:white}.regular-checkbox-box.disabled{background:#d7d7d7 !important;border:2px solid #d7d7d7 !important;cursor:not-allowed}.regular-radio:checked+.regular-radio-button:after{background:#6fdbe8}.regular-radio:checked+.regular-radio-button{background-color:none;color:#99a1a7;border:2px solid #d7d7d7;margin-right:5px}.regular-radio.disabled{background:#d7d7d7 !important;border:2px solid #d7d7d7 !important;cursor:not-allowed}.errorMessage{color:#ff8989;padding:10px 0}.error{border-color:#ff8989 !important}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#ff8989 !important}.has-error .form-control,.has-error .form-control:focus{border-color:#ff8989;-webkit-box-shadow:none;box-shadow:none}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#97d271}.has-success .form-control,.has-success .form-control:focus{border-color:#97d271;-webkit-box-shadow:none;box-shadow:none}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#fdd198}.has-warning .form-control,.has-warning .form-control:focus{border-color:#fdd198;-webkit-box-shadow:none;box-shadow:none}.bootstrap-timepicker-widget .form-control{padding:0px}#notification_overview_filter label{display:block}#notification_overview_list .img-space{position:absolute;top:25px;left:25px}@media (max-width:767px){.notifications{position:inherit !important;float:left !important}.notifications .dropdown-menu{width:300px !important;margin-left:0 !important}.notifications .dropdown-menu .arrow{margin-left:-142px !important}}.badge-space{margin-top:6px}.badge-space-chooser{padding:3px 5px;margin-left:1px}.badge{padding:3px 5px;border-radius:2px;font-weight:normal;font-family:Arial,sans-serif;font-size:10px !important;text-transform:uppercase;color:#fff;vertical-align:baseline;white-space:nowrap;text-shadow:none;background-color:#d7d7d7;line-height:1}.popover{border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);-moz-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175)}.popover .popover-title{background:none;border-bottom:none;color:#555;font-weight:300;font-size:16px;padding:15px}.popover .popover-content{font-size:13px;padding:5px 15px;color:#555}.popover .popover-content a{color:#6fdbe8}.popover .popover-content img{max-width:100%}.popover .popover-navigation{padding:15px}.list-group-item{padding:6px 15px;border:none;border-width:0 !important;border-left:3px solid #fff !important;font-size:12px;font-weight:600}.list-group-item i{font-size:14px}a.list-group-item:hover,a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#555;background-color:#f7f7f7;border-left:3px solid #6fdbe8 !important}@media (max-width:991px){.list-group{margin-left:4px}.list-group-item{display:inline-block !important;border-radius:3px !important;margin:4px 0;margin-bottom:4px !important}.list-group-item{border:none !important}a.list-group-item:hover,a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{border:none !important;background:#708fa0 !important;color:#fff !important}}@media screen and (max-width:768px){.modal-dialog{width:auto !important;padding-top:30px;padding-bottom:30px}}.modal-top{z-index:999999 !important}.modal{overflow-y:visible}.modal-dialog-extra-small{width:400px}.modal-dialog-small{width:500px}.modal-dialog-normal{width:600px}.modal-dialog-medium{width:768px}.modal-dialog-large{width:900px}@media screen and (max-width:920px){.modal-dialog-large{width:auto !important;padding-top:30px;padding-bottom:30px}}.modal{border:none}.modal h1,.modal h2,.modal h3,.modal h4,.modal h5{margin-top:20px;color:#555;font-weight:300}.modal h4.media-heading{margin-top:0}.modal-title{font-size:20px;font-weight:200;color:#555}.modal-dialog,.modal-content{min-width:150px}.modal-content{-webkit-border-radius:3px;-moz-border-radius:3px;box-shadow:0 2px 26px rgba(0,0,0,0.3),0 0 0 1px rgba(0,0,0,0.1);-webkit-box-shadow:0 2px 26px rgba(0,0,0,0.3),0 0 0 1px rgba(0,0,0,0.1);-moz-box-shadow:0 2px 26px rgba(0,0,0,0.3),0 0 0 1px rgba(0,0,0,0.1);border:none}.modal-content .modal-header{padding:20px 20px 0;border-bottom:none;text-align:center}.modal-content .modal-header .close{margin-top:2px;margin-right:5px}.modal-content .modal-body{padding:20px;font-size:13px}.modal-content .modal-footer{margin-top:0;text-align:left;padding:10px 20px 30px;border-top:none;text-align:center}.modal-content .modal-footer hr{margin-top:0}.modal-backdrop{background-color:rgba(0,0,0,0.5)}.modal-dialog.fadeIn,.modal-dialog.pulse{-webkit-animation-duration:200ms;-moz-animation-duration:200ms;animation-duration:200ms}.module-installed{opacity:0.5}.module-installed .label-success{background-color:#d7d7d7}.tooltip-inner{background-color:#708fa0;max-width:400px;text-align:left;font-weight:300;padding:2px 8px 4px;font-weight:bold;white-space:pre-wrap}.tooltip.top .tooltip-arrow{border-top-color:#708fa0}.tooltip.top-left .tooltip-arrow{border-top-color:#708fa0}.tooltip.top-right .tooltip-arrow{border-top-color:#708fa0}.tooltip.right .tooltip-arrow{border-right-color:#708fa0}.tooltip.left .tooltip-arrow{border-left-color:#708fa0}.tooltip.bottom .tooltip-arrow{border-bottom-color:#708fa0}.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#708fa0}.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#708fa0}.tooltip.in{opacity:1;filter:alpha(opacity=100)}.progress{height:10px;margin-bottom:15px;box-shadow:none;background:#ededed;border-radius:10px}.progress-bar-info{background-color:#6fdbe8;-webkit-box-shadow:none;box-shadow:none}#nprogress .bar{height:2px;background:#6fdbe8}table{margin-bottom:0px !important}table th{font-size:11px;color:#bebebe;font-weight:normal}table thead tr th{border:none !important}table .time{font-size:12px}table td a:hover{color:#6fdbe8}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:10px 10px 10px 0}.table>thead>tr>th select,.table>tbody>tr>th select,.table>tfoot>tr>th select,.table>thead>tr>td select,.table>tbody>tr>td select,.table>tfoot>tr>td select{font-size:12px;padding:4px 8px;height:30px;margin:0}.table-middle>thead>tr>th,.table-middle>tbody>tr>th,.table-middle>tfoot>tr>th,.table-middle>thead>tr>td,.table-middle>tbody>tr>td,.table-middle>tfoot>tr>td{vertical-align:middle !important}.comment-container{margin-top:10px}.comment-container .wall-entry-controls{margin-left:50px}.comment .media{position:relative !important;margin-top:0}.comment .media .nav-pills.preferences{display:none;right:-3px;top:-3px}.comment .media-body{overflow:visible}.comment .jp-progress{background-color:#dbdcdd !important}.comment .jp-play-bar{background:#cacaca}.comment .content a{color:#21bdd0}.comment.guest-mode .media:last-child .wall-entry-controls{margin-bottom:0;margin-left:50px}.comment.guest-mode .media:last-child hr{display:none}.comment_create,.content_edit{position:relative}.comment_create .comment-buttons,.content_edit .comment-buttons{position:absolute;bottom:2px;right:5px}.comment_create .btn-comment-submit,.content_edit .btn-comment-submit{margin-top:3px}.comment_create .fileinput-button,.content_edit .fileinput-button{float:left;padding:6px 10px;background:transparent !important}.comment_create .fileinput-button .fa,.content_edit .fileinput-button .fa{color:#d7d7d7}.comment_create .fileinput-button:hover .fa,.content_edit .fileinput-button:hover .fa{background:transparent !important;color:#b2b2b2}.comment_create .fileinput-button:active,.content_edit .fileinput-button:active{box-shadow:none !important}.post-richtext-input-group{position:relative}.post-richtext-input-group .comment-buttons{bottom:7px !important}.comment-container .content_edit{margin-left:50px}.comment_edit_content{margin-left:50px}.comment-message{overflow:hidden;overflow-wrap:break-word}.comment-create-input-group{position:relative}.comment-create-input-group .ProsemirrorEditor .ProseMirror{padding-right:72px}.comment-create-input-group.scrollActive .comment-buttons{right:22px}.grid-view img{width:24px;height:24px}.grid-view .filters input,.grid-view .filters select{border:2px solid #ededed;box-shadow:none;min-height:35px;border-radius:4px;font-size:12px;padding:4px}.grid-view .filters input:focus,.grid-view .filters select:focus{border:2px solid #6fdbe8;outline:0;box-shadow:none}.grid-view{padding:15px 0 0}.grid-view img{border-radius:3px}.grid-view table th{font-size:13px !important;font-weight:bold !important}.grid-view table td{vertical-align:middle !important}.grid-view table tr{font-size:13px !important}.grid-view table thead tr th:first-of-type{padding-left:5px}.grid-view table tbody tr{height:50px}.grid-view table tbody tr td:first-of-type{padding-left:5px}.grid-view .summary{font-size:12px;color:#bac2c7}.permission-grid-editor>.table>tbody>tr:first-child>td{border:none}.permission-grid-editor{padding-top:0px}.detail-view td,.detail-view th{padding:8px !important}.detail-view th{font-size:13px}.oembed_snippet{margin-top:10px;position:relative;padding-bottom:55%;padding-top:15px;height:0;overflow:hidden}.oembed_snippet iframe{position:absolute;top:0;left:0;width:100%;height:100%}.activities{max-height:400px;overflow:auto}.activities li .media{position:relative}.activities li .media .img-space{position:absolute;top:14px;left:14px}.activities li .media .media-body{max-width:295px}.contentForm_options{margin-top:10px;min-height:29px}.contentForm_options .btn_container{position:relative}.contentForm_options .btn_container .label-public{position:absolute;right:40px;top:11px}#content-topic-bar{margin-top:5px;text-align:right}#content-topic-bar .label{margin-left:4px}#contentFormError{color:#ff8989;padding-left:0;list-style:none}.placeholder-empty-stream{background-image:url("../img/placeholder-postform-arrow.png");background-repeat:no-repeat;padding:37px 0 0 70px;margin-left:90px}.wall-entry{position:relative}.wall-entry .content p,.wall-entry .content a{overflow:hidden;text-overflow:ellipsis;max-width:100%}.wall-entry .content img{max-width:100%}.wall-entry .media{overflow:visible}.wall-entry .well{margin-bottom:0}.wall-entry .well .comment .show-all-link{font-size:12px;cursor:pointer}.wall-entry .media-heading{font-size:14px;padding-top:1px;margin-bottom:3px}.wall-entry .media-heading .labels{padding-right:32px}.wall-entry .media-heading .viaLink{font-size:13px}.wall-entry .media-heading .viaLink i{color:#bebebe;padding-left:4px;padding-right:4px}.wall-entry .media-subheading{color:#bebebe;font-size:12px}.wall-entry .media-subheading .time{font-size:12px;white-space:nowrap}.wall-entry-controls,.wall-entry-controls a{font-size:11px;font-weight:700;color:#7a7a7a;margin-top:10px;margin-bottom:0}#wall-stream-filter-nav{font-size:12px;margin-bottom:10px;padding-top:2px;border-radius:0 0 4px 4px}#wall-stream-filter-nav .wall-stream-filter-root{margin:0;border:0 !important}#wall-stream-filter-nav .filter-panel{padding:0 10px}#wall-stream-filter-nav .wall-stream-filter-head{padding:5px 5px 10px 5px;border-bottom:1px solid #ddd}#wall-stream-filter-nav .wall-stream-filter-body{overflow:hidden;background-color:#f7f7f7;border:1px solid #ddd;border-top:0;border-radius:0 0 4px 4px}#wall-stream-filter-nav hr{margin:5px 0 0 0}#wall-stream-filter-nav .topic-remove-label{float:left}#wall-stream-filter-nav .topic-remove-label,#wall-stream-filter-nav .content-type-remove-label{margin-right:6px}#wall-stream-filter-nav .select2{width:260px !important;margin-bottom:5px;margin-top:2px}#wall-stream-filter-nav .select2 .select2-search__field{height:25px !important}#wall-stream-filter-nav .select2 .select2-selection__choice{height:23px !important}#wall-stream-filter-nav .select2 .select2-selection__choice span,#wall-stream-filter-nav .select2 .select2-selection__choice i{line-height:19px !important}#wall-stream-filter-nav .select2 .select2-selection__choice .img-rounded{width:18px !important;height:18px !important}#wall-stream-filter-nav .wall-stream-filter-bar{display:inline;float:right;white-space:normal}#wall-stream-filter-nav .wall-stream-filter-bar .label{height:18px;padding-top:4px}#wall-stream-filter-nav .wall-stream-filter-bar .btn,#wall-stream-filter-nav .wall-stream-filter-bar .label{box-shadow:0 0 2px #7a7a7a;-webkit-box-shadow:0 0 2px #7a7a7a;-moz-box-shadow:0 0 2px #7a7a7a}@media (max-width:767px){#wall-stream-filter-nav .wall-stream-filter-root{white-space:nowrap}#wall-stream-filter-nav .wall-stream-filter-body{overflow:auto}}.filter-root{margin:15px}.filter-root .row{display:table !important}.filter-root .filter-panel{padding:0 5px;display:table-cell !important;float:none}.filter-root .filter-panel .filter-block strong{margin-bottom:5px}.filter-root .filter-panel .filter-block ul.filter-list{list-style:none;padding:0;margin:0 0 5px}.filter-root .filter-panel .filter-block ul.filter-list li{font-size:12px;padding:2px}.filter-root .filter-panel .filter-block ul.filter-list li a{color:#555}.filter-root .filter-panel div.filter-block:last-of-type ul.filter-list{margin:0px}.filter-root .filter-panel+.filter-panel{border-left:2px solid #ededed}.stream-entry-loader{float:right;margin-top:5px}.load-suppressed{margin-top:-17px;margin-bottom:15px;text-align:center}.load-suppressed a{display:inline-block;background-color:white;padding:5px;border-radius:0 0 4px 4px;border:1px solid #ddd;font-size:11px}.space-owner{text-align:center;margin:14px 0;font-size:13px;color:#999}.space-member-sign{color:#97d271;position:absolute;top:42px;left:42px;font-size:16px;background:#fff;width:24px;height:24px;padding:2px 3px 1px 4px;border-radius:50px;border:2px solid #97d271}#space-menu-dropdown i.type{font-size:16px;color:#BFBFBF}#space-menu-spaces [data-space-chooser-item]{cursor:pointer}#space-menu-dropdown .input-group-addon{border-radius:0px 4px 4px 0px}#space-menu-dropdown .input-group-addon.focus{border-radius:0px 4px 4px 0px;border:2px solid #6fdbe8;border-left:0px}#space-menu-search{border-right:0px}#space-directory-link i{margin-right:0px}.space-acronym{color:#fff;text-align:center;display:inline-block}.current-space-image{margin-right:3px;margin-top:3px}@media (max-width:767px){#space-menu>.title{display:none}#space-menu-dropdown{width:300px !important}}.files,#postFormFiles_list{padding-left:0}.contentForm-upload-list{padding-left:0}.contentForm-upload-list li:first-child{margin-top:10px}.file_upload_remove_link,.file_upload_remove_link:hover{color:#ff8989;cursor:pointer}.file-preview-item{text-overflow:ellipsis;overflow:hidden}.post-files{margin-top:10px}.post-files img{vertical-align:top;margin-bottom:3px;margin-right:5px;max-height:100%;-webkit-animation-duration:2s;animation-duration:2s}#wallStream.mobile .post-files{margin-top:10px;display:flex;overflow-x:auto}#wallStream.mobile .post-files img{max-width:190px}.file-preview-content{cursor:pointer}.image-upload-container{position:relative}.image-upload-container .image-upload-buttons{display:none;position:absolute;right:5px;bottom:5px}.image-upload-container input[type="file"]{position:absolute;opacity:0}.image-upload-container .image-upload-loader{display:none;position:absolute;top:0;left:0;width:100%;height:100%;padding:20px;background:#f8f8f8}.mime{background-repeat:no-repeat;background-position:0 0;padding:1px 0 4px 26px}.mime-word{background-image:url("../img/mime/word.png")}.mime-excel{background-image:url("../img/mime/excel.png")}.mime-powerpoint{background-image:url("../img/mime/powerpoint.png")}.mime-pdf{background-image:url("../img/mime/pdf.png")}.mime-zip{background-image:url("../img/mime/zip.png")}.mime-image{background-image:url("../img/mime/image.png")}.mime-file{background-image:url("../img/mime/file.png")}.mime-photoshop{background-image:url("../img/mime/photoshop.png")}.mime-illustrator{background-image:url("../img/mime/illustrator.png")}.mime-video{background-image:url("../img/mime/video.png")}.mime-audio{background-image:url("../img/mime/audio.png")}ul.tour-list{list-style:none;margin-bottom:0;padding-left:10px}ul.tour-list li{padding-top:5px}ul.tour-list li a{color:#6fdbe8}ul.tour-list li a .fa{width:16px}ul.tour-list li.completed a{text-decoration:line-through;color:#bebebe}.atwho-view .cur{border-left:3px solid #6fdbe8;background-color:#f7f7f7 !important}.atwho-user,.atwho-space,.atwho-input a{color:#6fdbe8}.atwho-input a:hover{color:#6fdbe8}.atwho-view strong{background-color:#f9f0d2}.atwho-view .cur strong{background-color:#f9f0d2}.atwho-view span{padding:5px}.sk-spinner-three-bounce.sk-spinner{margin:0 auto;width:70px;text-align:center}.loader{padding:30px 0}.loader .sk-spinner-three-bounce div,.loader .sk-spinner-three-bounce span{width:12px;height:12px;background-color:#6fdbe8;border-radius:100%;display:inline-block;-webkit-animation:sk-threeBounceDelay 1.4s infinite ease-in-out;animation:sk-threeBounceDelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.loader .sk-spinner-three-bounce .sk-bounce1{-webkit-animation-delay:-0.32s;animation-delay:-0.32s}.loader .sk-spinner-three-bounce .sk-bounce2{-webkit-animation-delay:-0.16s;animation-delay:-0.16s}@-webkit-keyframes sk-threeBounceDelay{0%,80%,100%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes sk-threeBounceDelay{0%,80%,100%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.loader-modal{padding:8px 0}.loader-postform{padding:9px 0}.loader-postform .sk-spinner-three-bounce.sk-spinner{text-align:left;margin:0}.markdown-render h1,.markdown-render h2,.markdown-render h3,.markdown-render h4,.markdown-render h5,.markdown-render h6{font-weight:bold !important}.markdown-render h1{font-size:28px !important}.markdown-render h2{font-size:24px !important}.markdown-render h3{font-size:18px !important}.markdown-render h4{font-size:16px !important}.markdown-render h5{font-size:14px !important}.markdown-render h6{color:#999;font-size:14px !important}.markdown-render pre{padding:0;border:none;border-radius:3px}.markdown-render pre code{padding:10px;border-radius:3px;font-size:12px !important}.markdown-render a,.markdown-render a:visited{background-color:inherit;text-decoration:none;color:#6fdbe8 !important}.markdown-render a.header-anchor{color:#777 !important}.markdown-render img{max-width:100%}.markdown-render table{width:100%}.markdown-render table th{font-size:13px;font-weight:700;color:#555}.markdown-render table thead tr{border-bottom:1px solid #d7d7d7}.markdown-render table tbody tr td,.markdown-render table thead tr th{border:1px solid #d7d7d7 !important;padding:4px}.md-editor.active{border:2px solid #6fdbe8 !important}.md-editor textarea{padding:10px !important}[data-ui-markdown],[data-ui-richtext]{overflow:hidden;overflow-wrap:break-word}[data-ui-markdown] h1,[data-ui-richtext] h1,[data-ui-markdown] h2,[data-ui-richtext] h2,[data-ui-markdown] h3,[data-ui-richtext] h3,[data-ui-markdown] h4,[data-ui-richtext] h4,[data-ui-markdown] h5,[data-ui-richtext] h5,[data-ui-markdown] h6,[data-ui-richtext] h6{text-align:start;margin:0 0 0.5em}[data-ui-markdown] h1,[data-ui-richtext] h1{font-size:1.7em !important;font-weight:600}[data-ui-markdown] h2,[data-ui-richtext] h2{font-size:1.5em !important;font-weight:500}[data-ui-markdown] h3,[data-ui-richtext] h3{font-size:1.2em !important}[data-ui-markdown] h4,[data-ui-richtext] h4{font-size:1.1em !important}[data-ui-markdown] h5,[data-ui-richtext] h5{font-size:1em !important}[data-ui-markdown] h6,[data-ui-richtext] h6{font-size:.85em !important}[data-ui-markdown] p,[data-ui-richtext] p,[data-ui-markdown] pre,[data-ui-richtext] pre,[data-ui-markdown] blockquote,[data-ui-richtext] blockquote{margin:0 0 1.1em}[data-ui-markdown] p:last-child,[data-ui-richtext] p:last-child{margin:0}[data-ui-markdown] pre code.hljs,[data-ui-richtext] pre code.hljs{background-color:#f5f5f5}[data-ui-markdown] blockquote,[data-ui-richtext] blockquote{border-left-width:10px;background-color:rgba(128,128,128,0.05);border-top-right-radius:5px;border-bottom-right-radius:5px;padding:15px 20px;font-size:1em;border-left:5px solid #888888}[data-ui-markdown] table,[data-ui-richtext] table{width:100%}[data-ui-markdown] table th,[data-ui-richtext] table th{font-size:13px;font-weight:700;color:#555;background-color:#f7f7f7}[data-ui-markdown] table td,[data-ui-richtext] table td,[data-ui-markdown] table th,[data-ui-richtext] table th{border:1px solid #d7d7d7 !important;padding:6px}[data-ui-markdown] dt,[data-ui-richtext] dt,[data-ui-markdown] dd,[data-ui-richtext] dd{margin-top:5px;margin-bottom:5px;line-height:1.45}[data-ui-markdown] dt,[data-ui-richtext] dt{font-weight:bold}[data-ui-markdown] dd,[data-ui-richtext] dd{margin-left:40px}[data-ui-markdown] pre,[data-ui-richtext] pre{text-align:start;border:0;padding:10px 20px;border-radius:5px}[data-ui-markdown] pre code,[data-ui-richtext] pre code{white-space:pre !important}[data-ui-markdown] blockquote ul:last-child,[data-ui-richtext] blockquote ul:last-child,[data-ui-markdown] blockquote ol:last-child,[data-ui-richtext] blockquote ol:last-child{margin-bottom:0px}[data-ui-markdown] ul,[data-ui-richtext] ul,[data-ui-markdown] ol,[data-ui-richtext] ol{margin-top:0;margin-bottom:10.5px}[data-ui-markdown] ul li p,[data-ui-richtext] ul li p,[data-ui-markdown] ol li p,[data-ui-richtext] ol li p{overflow:visible !important}[data-ui-markdown] .footnote,[data-ui-richtext] .footnote{vertical-align:top;position:relative;top:-0.5em;font-size:.8em}[data-ui-markdown] .emoji,[data-ui-richtext] .emoji{width:16px}[data-ui-markdown] a.not-found,[data-ui-richtext] a.not-found{color:#fdd198}[data-ui-markdown] li,[data-ui-richtext] li{border:0 !important;background-color:transparent !important;padding:0}[data-ui-markdown] img,[data-ui-richtext] img{max-width:100%}blockquote{border-left:2px dotted #888;padding-left:5px;background:#d0f0ff}.wmd-panel{min-width:500px}.wmd-button-bar{width:100%;background-color:Silver}.wmd-input{height:300px;width:100%;background-color:Gainsboro;border:1px solid DarkGray}.wmd-button-row{position:relative;margin-left:5px;margin-right:5px;margin-bottom:5px;margin-top:10px;padding:0px;height:20px}.wmd-spacer{width:1px;height:20px;margin-left:14px;position:absolute;background-color:Silver;display:inline-block;list-style:none}.wmd-button{width:20px;height:20px;padding-left:2px;padding-right:3px;position:absolute;display:inline-block;list-style:none;cursor:pointer}.wmd-button>span{background-image:url(../img/wmd-buttons.png);background-repeat:no-repeat;background-position:0px 0px;width:20px;height:20px;display:inline-block}.wmd-spacer1{left:50px}.wmd-spacer2{left:175px}.wmd-spacer3{left:300px}.wmd-prompt-background{background-color:Black}.wmd-prompt-dialog{border:1px solid #999999;background-color:#F5F5F5}.wmd-prompt-dialog>div{font-size:0.8em;font-family:arial,helvetica,sans-serif}.wmd-prompt-dialog>form>input[type="text"]{border:1px solid #999999;color:black}.wmd-prompt-dialog>form>input[type="button"]{border:1px solid #888888;font-family:trebuchet MS,helvetica,sans-serif;font-size:0.8em;font-weight:bold}@media (max-width:991px){.layout-sidebar-container{display:none}}.ui-widget-header{border:none !important;background:#fff !important;color:#7a7a7a !important;font-weight:300 !important}.ui-widget-content{border:1px solid #dddcda !important;border-radius:0 !important;background:#fff;color:#555 !important;-webkit-box-shadow:0 6px 6px rgba(0,0,0,0.1);box-shadow:0 6px 6px rgba(0,0,0,0.1)}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{opacity:0.2}.ui-datepicker .ui-datepicker-prev:hover,.ui-datepicker .ui-datepicker-next:hover{background:#fff !important;border:none;margin:1px}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:none !important;background:#f7f7f7 !important;color:#7a7a7a !important}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:none !important;border:1px solid #b2b2b2 !important}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #6fdbe8 !important;background:#ddf6fa !important}.status-bar-body{color:white;position:fixed;width:100%;background-color:rgba(0,0,0,0.7);text-align:center;padding:20px;z-index:9999999;bottom:0px;display:block;line-height:20px}.status-bar-close{color:white;fonfont-weight:bold;font-size:21px;cursor:pointer}.status-bar-close:hover{color:white}.status-bar-close i{vertical-align:top !important;padding-top:3px}.status-bar-content i{margin-right:10px;font-size:21px;vertical-align:middle}.status-bar-content .showMore{color:#6fdbe8;float:right;margin-left:10px;font-size:0.7em;cursor:pointer;vertical-align:middle;white-space:nowrap}.status-bar-content .status-bar-details{text-align:left;font-size:0.7em;margin-top:20px;max-height:200px;overflow:auto}.status-bar-content span{vertical-align:middle}.status-bar-content i.error,.status-bar-content i.fatal{color:#ff8989}.status-bar-content i.warning{color:#fdd198}.status-bar-content i.info,.status-bar-content i.debug{color:#6fdbe8}.status-bar-content i.success{color:#85CA2B}.highlight{background-color:#fff8e0}.alert-default{color:#555;background-color:#f7f7f7;border-color:#ededed;font-size:13px}.alert-default .info{margin:10px 0}.alert-success{color:#84be5e;background-color:#f7fbf4;border-color:#97d271}.alert-warning{color:#e9b168;background-color:#fffbf7;border-color:#fdd198}.alert-danger{color:#ff8989;background-color:#fff6f6;border-color:#ff8989}.data-saved{padding-left:10px;color:#6fdbe8}img.bounceIn{-webkit-animation-duration:800ms;-moz-animation-duration:800ms;animation-duration:800ms}.tags .tag{margin-top:5px;border-radius:2px;padding:4px 8px;text-transform:uppercase;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ProsemirrorEditor.fullscreen{position:fixed;top:0;left:0;width:100%;height:100%;z-index:9998}.ProsemirrorEditor.fullscreen .ProseMirror-menubar-wrapper{height:100%}.ProsemirrorEditor.fullscreen .humhub-ui-richtext{max-height:none !important}.ProsemirrorEditor.fullscreen .ProseMirror{position:static;overflow:auto;heigh:100%;height:calc(100% - 26px);height:-o-calc(100% - 26px);height:-webkit-calc(100% - 26px)}.ProsemirrorEditor.fullscreen .ProseMirror-menubar{position:static !important;top:0 !important;left:0 !important;margin:0 !important;width:100% !important}.ProsemirrorEditor .ProseMirror{padding-right:12px}.ProsemirrorEditor .ProseMirror-menu{margin:0 -4px;line-height:1}.ProsemirrorEditor .ProseMirror-tooltip .ProseMirror-menu{width:-webkit-fit-content;width:fit-content;white-space:pre}.ProsemirrorEditor .ProseMirror-menuitem{margin-right:0;display:inline-block}.ProsemirrorEditor .ProseMirror-menuseparator{border-right:1px solid #ddd;margin-right:3px}.ProsemirrorEditor .ProseMirror-menuitem .ProseMirror-menu-group{border-right:1px solid #ddd}.ProsemirrorEditor .ProseMirror-menuitem .ProseMirror-menu-group.last{border-right:none}.ProsemirrorEditor .ProseMirror-menuitem .seperator{border-right:1px solid #ddd;margin-right:2px;padding-right:2px}.ProsemirrorEditor .ProseMirror-menu-dropdown,.ProsemirrorEditor .ProseMirror-menu-dropdown-menu{font-size:90%;white-space:nowrap}.ProsemirrorEditor .ProseMirror-menu-dropdown{cursor:pointer;position:relative;padding-right:15px !important}.ProsemirrorEditor .ProseMirror-menu-dropdown-wrap{padding:1px 0 1px 0;display:inline-block;position:relative}.ProsemirrorEditor .ProseMirror-menu-dropdown-right{right:0}.ProsemirrorEditor .ProseMirror-menu-dropdown:after{content:"";border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid currentColor;opacity:.6;position:absolute;right:4px;top:calc(50% - 2px)}.ProsemirrorEditor .ProseMirror-menu-submenu{border-top-right-radius:4px}.ProsemirrorEditor .ProseMirror-menu-dropdown-menu,.ProsemirrorEditor .ProseMirror-menu-submenu{position:absolute;background:white;color:#666;border:1px solid #aaa;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.ProsemirrorEditor .ProseMirror-menu-dropdown-menu{z-index:15;min-width:6em;margin-top:2px}.ProsemirrorEditor .ProseMirror-menu-dropdown-item{cursor:pointer}.ProsemirrorEditor .ProseMirror-menu-dropdown-item div[title],.ProsemirrorEditor .ProseMirror-menu-submenu-wrap{padding:4px}.ProsemirrorEditor .ProseMirror-menu-dropdown-item:hover{background:#f2f2f2}.ProsemirrorEditor .ProseMirror-menu-submenu-wrap{position:relative}.ProsemirrorEditor .ProseMirror-menu-submenu-label:after{content:"";border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid currentColor;opacity:.6;position:absolute;right:4px;top:calc(50% - 4px)}.ProsemirrorEditor .ProseMirror-menu-submenu{display:none;min-width:4em;left:100%;top:0}.ProsemirrorEditor .ProseMirror-menu-active{background:#eee;border-radius:4px;border:1px solid #ededed !important}.ProsemirrorEditor .ProseMirror-menu-disabled{opacity:.3}.ProsemirrorEditor .ProseMirror-menu-submenu-wrap:hover .ProseMirror-menu-submenu,.ProsemirrorEditor .ProseMirror-menu-submenu-wrap-active .ProseMirror-menu-submenu{display:block}.ProsemirrorEditor .ProseMirror-icon{display:inline-block;line-height:.8;vertical-align:-2px;padding:1px 7px;cursor:pointer;border:1px solid transparent}.ProsemirrorEditor .ProseMirror-menu-disabled.ProseMirror-icon{cursor:default}.ProsemirrorEditor .ProseMirror-icon svg{fill:currentColor;height:1em}.ProsemirrorEditor .ProseMirror-icon span{vertical-align:text-top}.ProsemirrorEditor.plainMenu .ProseMirror{border-top-left-radius:0 !important;border-top-right-radius:0 !important;border-top-width:1px !important}.ProsemirrorEditor.plainMenu .ProseMirror-menu-group{padding:5px}.ProsemirrorEditor.plainMenu .ProseMirror-menuitem .ProseMirror-menu-group{padding:2px}.ProsemirrorEditor.plainMenu .ProseMirror-menubar~.ProseMirror-focused{border-color:#6fdbe8 !important}.ProsemirrorEditor.plainMenu .ProseMirror-textblock-dropdown{min-width:3em}.ProsemirrorEditor.plainMenu .ProseMirror-menubar-wrapper{z-index:8}.ProsemirrorEditor.plainMenu .ProseMirror-menubar{background-color:#f7f7f7;border-top-left-radius:4px;border-top-right-radius:4px;border:1px solid #ddd;position:relative;min-height:1em;color:#666;padding:1px 6px 1px 0;top:0;left:0;right:0;z-index:10;-moz-box-sizing:border-box;box-sizing:border-box;overflow:visible}.ProsemirrorEditor.focusMenu .form-control:focus{border-top-left-radius:0 !important}.ProsemirrorEditor.focusMenu .ProseMirror-menubar{display:table;min-height:1em;color:#666;padding:2px 6px;top:0;left:0;right:0;z-index:10;-moz-box-sizing:border-box;box-sizing:border-box;overflow:visible;margin-top:-26px;background:white;border:1px solid #d7d7d7;border-bottom:0;border-top:2px solid #d7d7d7;border-top-left-radius:4px;border-top-right-radius:4px;float:left}@-moz-document url-prefix(){.ProsemirrorEditor.focusMenu .ProseMirror-menubar{margin-top:-27px}}.ProsemirrorEditor .ProseMirror{position:relative;word-wrap:break-word;white-space:pre-wrap;-webkit-font-variant-ligatures:none;font-variant-ligatures:none}.ProsemirrorEditor .ProseMirror ul,.ProsemirrorEditor .ProseMirror ol{cursor:default}.ProsemirrorEditor .ProseMirror pre{white-space:pre-wrap}.ProsemirrorEditor .ProseMirror li{position:relative}.ProsemirrorEditor .ProseMirror img{max-width:100%}.ProsemirrorEditor .ProseMirror-hideselection *::selection{background:transparent}.ProsemirrorEditor .ProseMirror-hideselection *::-moz-selection{background:transparent}.ProsemirrorEditor .ProseMirror-selectednode{outline:2px dashed #8cf}.ProsemirrorEditor li.ProseMirror-selectednode{outline:none}.ProsemirrorEditor li.ProseMirror-selectednode:after{content:"";position:absolute;left:-32px;right:-2px;top:-2px;bottom:-2px;border:2px solid #8cf;pointer-events:none}.ProsemirrorEditor .ProseMirror-textblock-dropdown{min-width:3em}.ProsemirrorEditor .ProseMirror-menu{margin:0 -4px;line-height:1}.ProsemirrorEditor .ProseMirror-tooltip .ProseMirror-menu{width:-webkit-fit-content;width:fit-content;white-space:pre}.ProsemirrorEditor .ProseMirror-gapcursor{display:none;pointer-events:none;position:absolute}.ProsemirrorEditor .ProseMirror-gapcursor:after{content:"";display:block;position:absolute;top:-2px;width:20px;border-top:1px solid black;animation:ProseMirror-cursor-blink 1.1s steps(2, start) infinite}@keyframes ProseMirror-cursor-blink{to{visibility:hidden}}.ProsemirrorEditor .ProseMirror-focused .ProseMirror-gapcursor{display:block}.ProsemirrorEditor .ProseMirror-example-setup-style hr{padding:2px 10px;border:none;margin:1em 0}.ProsemirrorEditor .ProseMirror-example-setup-style hr:after{content:"";display:block;height:1px;background-color:silver;line-height:2px}.ProsemirrorEditor .ProseMirror ul,.ProsemirrorEditor .ProseMirror ol{padding-left:30px}.ProsemirrorEditor .ProseMirror blockquote{padding-left:1em;border-left:3px solid #eee;margin-left:0;margin-right:0}.ProsemirrorEditor .ProseMirror-example-setup-style img{cursor:default}.ProsemirrorEditor .ProseMirror p{margin-top:1em}.ProsemirrorEditor .ProseMirror p:first-child{margin:0px}.ProsemirrorEditor .ProseMirror p:first-child+*{margin-top:1em}.ProsemirrorEditor .ProsemirrorEditor{position:relative}.ProsemirrorEditor .ProsemirrorEditor .ProseMirror{padding-right:12px !important}.ProsemirrorEditor .ProsemirrorEditor img{max-width:100%}.ProsemirrorEditor .ProseMirror h1:first-child,.ProsemirrorEditor .ProseMirror h2:first-child,.ProsemirrorEditor .ProseMirror h3:first-child,.ProsemirrorEditor .ProseMirror h4:first-child,.ProsemirrorEditor .ProseMirror h5:first-child,.ProsemirrorEditor .ProseMirror h6:first-child{margin-top:10px}.ProsemirrorEditor .ProseMirror [data-mention]{color:#6fdbe8}.ProsemirrorEditor .ProseMirror{outline:none}.ProsemirrorEditor .ProseMirror [data-oembed]{font-size:0}.ProsemirrorEditor .ProseMirror iframe{pointer-events:none;display:block}.ProsemirrorEditor .ProseMirror p{margin-bottom:1em}.ProsemirrorEditor .ProseMirror-textblock-dropdown{min-width:3em}.ProsemirrorEditor .ProseMirror .placeholder{padding:0px !important;pointer-events:none;height:0}.ProsemirrorEditor .ProseMirror:focus .placeholder{display:none}.ProsemirrorEditor .ProseMirror .tableWrapper{overflow-x:auto}.ProsemirrorEditor .ProseMirror .column-resize-handle{position:absolute;right:-2px;top:0;bottom:0;width:4px;z-index:20;background-color:#adf;pointer-events:none}.ProsemirrorEditor .ProseMirror.resize-cursor{cursor:ew-resize;cursor:col-resize}.ProsemirrorEditor .ProseMirror .selectedCell:after{z-index:2;position:absolute;content:"";left:0;right:0;top:0;bottom:0;background:rgba(200,200,255,0.4);pointer-events:none}.ProsemirrorEditor .ProseMirror-menubar-wrapper{position:relative;outline:none}.ProsemirrorEditor .ProseMirror table{margin:0}.ProsemirrorEditor .ProseMirror .tableWrapper{margin:1em 0}.ProseMirror-prompt{background:white;padding:5px 10px 5px 15px;border:1px solid silver;position:fixed;border-radius:3px;min-width:300px;z-index:999999;box-shadow:-0.5px 2px 5px rgba(0,0,0,0.2)}.ProseMirror-prompt h5{font-weight:bold;font-size:100%;margin:15px 0}.ProseMirror-prompt input{margin-bottom:5px}.ProseMirror-prompt-close{position:absolute;left:2px;top:1px;color:#666;border:none;background:transparent;padding:0}.ProseMirror-prompt-close:after{content:"✕";font-size:12px}.ProseMirror-invalid{background:#ffc;border:1px solid #cc7;border-radius:4px;padding:5px 10px;position:absolute;min-width:10em}.ProseMirror-prompt-buttons{margin:15px 0;text-align:center}.atwho-view .cur{border-left:3px solid #59d6e4;background-color:#f7f7f7 !important}.atwho-user,.atwho-space,.atwho-input a{color:#59d6e4}.atwho-input a:hover{color:#59d6e4}.atwho-view strong{background-color:#f9f0d2}.atwho-view .cur strong{background-color:#f9f0d2}[data-emoji-category]{max-height:200px;display:block;position:relative;overflow:auto}[data-emoji-category] .atwho-emoji-entry{width:24px;height:28px;overflow:hidden}[data-emoji-category] .atwho-emoji-entry.cur{background-color:#ededed !important}.emoji-nav{padding-top:10px}.emoji-nav .emoji-nav-item{border-top:2px solid #fff8e0}.emoji-nav .emoji-nav-item.cur{border-left:0px;border-top:2px solid #6fdbe8}@media screen and (max-width:768px){.ProsemirrorEditor.focusMenu .ProseMirror-menubar{min-height:1em}}.icon-sm,.fa-sm{font-size:.875em}.icon-lg,.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-0.0667em}.icon-2x,.fa-2x{font-size:2em}.icon-3x,.fa-3x{font-size:3em}.icon-4x,.fa-4x{font-size:4em}.icon-5x,.fa-5x{font-size:5em}.icon-6x,.fa-6x{font-size:6em}.icon-7x,.fa-7x{font-size:7em}.icon-9x,.fa-9x{font-size:9em}.icon-10x,.fa-10x{font-size:10em}/*! Select2 humhub Theme v0.1.0-beta.4 | MIT License | github.com/select2/select2-humhub-theme */.select2-container--humhub{display:block}.select2-container--humhub .select2-selection{background-color:#fff;border:2px solid #ededed;border-radius:4px;color:#555;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;outline:0}.select2-container--humhub .select2-search--dropdown .select2-search__field{background-color:#fff;border:2px solid #ededed;border-radius:4px;color:#555;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px}.select2-container--humhub .select2-search__field{outline:0}.select2-container--humhub .select2-search__field::-webkit-input-placeholder{color:#999}.select2-container--humhub .select2-search__field:-moz-placeholder{color:#999}.select2-container--humhub .select2-search__field::-moz-placeholder{color:#999;opacity:1}.select2-container--humhub .select2-search__field:-ms-input-placeholder{color:#999}.select2-container--humhub .select2-results__option[role=group]{padding:0}.select2-container--humhub .select2-results__option[aria-disabled=true]{color:#777;cursor:not-allowed}.select2-container--humhub .select2-results__option[aria-selected=true]{background-color:#f5f5f5;color:#262626;border-left:3px solid transparent}.select2-container--humhub .select2-results__option[aria-selected=false]{border-left:3px solid transparent}.select2-container--humhub .select2-results__option--highlighted[aria-selected]{background-color:#f7f7f7;border-left:3px solid #6fdbe8;color:#555}.select2-container--humhub .select2-results__option .select2-results__option{padding:6px 12px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option{margin-left:-12px;padding-left:24px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-24px;padding-left:36px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-36px;padding-left:48px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-48px;padding-left:60px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-60px;padding-left:72px}.select2-container--humhub .select2-results__group{color:#777;display:block;padding:6px 12px;font-size:12px;line-height:1.42857143;white-space:nowrap}.select2-container--humhub.select2-container--focus .select2-selection,.select2-container--humhub.select2-container--open .select2-selection{border:2px solid #6fdbe8;outline:0;box-shadow:none}.select2-container--humhub.select2-container--open .select2-selection .select2-selection__arrow b{border-color:transparent transparent #999 transparent;border-width:0 4px 4px 4px}.select2-container--humhub .select2-selection__clear{color:#999;cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--humhub .select2-selection__clear:hover{color:#333}.select2-container--humhub.select2-container--disabled .select2-selection{border-color:#ccc;-webkit-box-shadow:none;box-shadow:none}.select2-container--humhub.select2-container--disabled .select2-selection,.select2-container--humhub.select2-container--disabled .select2-search__field{cursor:not-allowed}.select2-container--humhub.select2-container--disabled .select2-selection,.select2-container--humhub.select2-container--disabled .select2-selection--multiple .select2-selection__choice{background-color:#eee}.select2-container--humhub.select2-container--disabled .select2-selection__clear,.select2-container--humhub.select2-container--disabled .select2-selection--multiple .select2-selection__choice__remove{display:none}.select2-container--humhub .select2-dropdown{-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);border-color:#d7d7d7;overflow-x:hidden;margin-top:-1px}.select2-container--humhub .select2-dropdown--above{margin-top:1px}.select2-container--humhub .select2-results>.select2-results__options{max-height:400px;overflow-y:auto}.select2-container--humhub .select2-selection--single{height:34px;line-height:1.42857143;padding:6px 24px 6px 12px}.select2-container--humhub .select2-selection--single .select2-selection__arrow{position:absolute;bottom:0;right:12px;top:0;width:4px}.select2-container--humhub .select2-selection--single .select2-selection__arrow b{border-color:#999 transparent transparent transparent;border-style:solid;border-width:4px 4px 0 4px;height:0;left:0;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--humhub .select2-selection--single .select2-selection__rendered{color:#555;padding:0}.select2-container--humhub .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--humhub .select2-selection--multiple{min-height:34px;padding:2px}.select2-container--humhub .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;display:block;line-height:1.42857143;list-style:none;margin:0;overflow:hidden;padding:0;width:100%;text-overflow:ellipsis;white-space:nowrap}.select2-container--humhub .select2-selection--multiple .select2-selection__placeholder{color:#999;float:left;margin-top:5px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice{color:#555;border-radius:4px;cursor:default;padding:0 6px;background-color:#6fdbe8;color:#fff;border-radius:3px;font-size:12px !important;padding:0 5px 2px 2px;float:left;margin:2px;height:28px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice img,.select2-container--humhub .select2-selection--multiple .select2-selection__choice div{margin-right:5px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice span.no-image{line-height:27px;padding-left:5px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice i{margin:0px 2px;line-height:27px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice .picker-close{cursor:pointer}.select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field{background:transparent;padding:0 5px;width:auto !important;height:32px;line-height:1.42857143;margin-top:0;min-width:5em}.select2-container--humhub .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:none;font-weight:bold;margin-right:3px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--humhub .select2-selection--multiple .select2-selection__clear{margin-top:6px}.select2-container--humhub.input-sm,.select2-container--humhub.input-lg{border-radius:0;font-size:12px;height:auto;line-height:1;padding:0}.select2-container--humhub.input-sm .select2-selection--single,.input-group-sm .select2-container--humhub .select2-selection--single,.form-group-sm .select2-container--humhub .select2-selection--single{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 22px 5px 10px}.select2-container--humhub.input-sm .select2-selection--single .select2-selection__arrow b,.input-group-sm .select2-container--humhub .select2-selection--single .select2-selection__arrow b,.form-group-sm .select2-container--humhub .select2-selection--single .select2-selection__arrow b{margin-left:-5px}.select2-container--humhub.input-sm .select2-selection--multiple,.input-group-sm .select2-container--humhub .select2-selection--multiple,.form-group-sm .select2-container--humhub .select2-selection--multiple{min-height:30px}.select2-container--humhub.input-sm .select2-selection--multiple .select2-selection__choice,.input-group-sm .select2-container--humhub .select2-selection--multiple .select2-selection__choice,.form-group-sm .select2-container--humhub .select2-selection--multiple .select2-selection__choice{font-size:12px;line-height:1.5;margin:4px 0 0 5px;padding:0 5px}.select2-container--humhub.input-sm .select2-selection--multiple .select2-search--inline .select2-search__field,.input-group-sm .select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field,.form-group-sm .select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field{padding:0 10px;font-size:12px;height:28px;line-height:1.5}.select2-container--humhub.input-sm .select2-selection--multiple .select2-selection__clear,.input-group-sm .select2-container--humhub .select2-selection--multiple .select2-selection__clear,.form-group-sm .select2-container--humhub .select2-selection--multiple .select2-selection__clear{margin-top:5px}.select2-container--humhub.input-lg .select2-selection--single,.input-group-lg .select2-container--humhub .select2-selection--single,.form-group-lg .select2-container--humhub .select2-selection--single{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 31px 10px 16px}.select2-container--humhub.input-lg .select2-selection--single .select2-selection__arrow,.input-group-lg .select2-container--humhub .select2-selection--single .select2-selection__arrow,.form-group-lg .select2-container--humhub .select2-selection--single .select2-selection__arrow{width:5px}.select2-container--humhub.input-lg .select2-selection--single .select2-selection__arrow b,.input-group-lg .select2-container--humhub .select2-selection--single .select2-selection__arrow b,.form-group-lg .select2-container--humhub .select2-selection--single .select2-selection__arrow b{border-width:5px 5px 0 5px;margin-left:-5px;margin-left:-10px;margin-top:-2.5px}.select2-container--humhub.input-lg .select2-selection--multiple,.input-group-lg .select2-container--humhub .select2-selection--multiple,.form-group-lg .select2-container--humhub .select2-selection--multiple{min-height:46px}.select2-container--humhub.input-lg .select2-selection--multiple .select2-selection__choice,.input-group-lg .select2-container--humhub .select2-selection--multiple .select2-selection__choice,.form-group-lg .select2-container--humhub .select2-selection--multiple .select2-selection__choice{font-size:18px;line-height:1.3333333;border-radius:4px;margin:9px 0 0 8px;padding:0 10px}.select2-container--humhub.input-lg .select2-selection--multiple .select2-search--inline .select2-search__field,.input-group-lg .select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field,.form-group-lg .select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field{padding:0 16px;font-size:18px;height:44px;line-height:1.3333333}.select2-container--humhub.input-lg .select2-selection--multiple .select2-selection__clear,.input-group-lg .select2-container--humhub .select2-selection--multiple .select2-selection__clear,.form-group-lg .select2-container--humhub .select2-selection--multiple .select2-selection__clear{margin-top:10px}.select2-container--humhub.input-lg.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #999 transparent;border-width:0 5px 5px 5px}.input-group-lg .select2-container--humhub.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #999 transparent;border-width:0 5px 5px 5px}.select2-container--humhub[dir="rtl"] .select2-selection--single{padding-left:24px;padding-right:12px}.select2-container--humhub[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:0;padding-left:0;text-align:right}.select2-container--humhub[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--humhub[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:12px;right:auto}.select2-container--humhub[dir="rtl"] .select2-selection--single .select2-selection__arrow b{margin-left:0}.select2-container--humhub[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--humhub[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder{float:right}.select2-container--humhub[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:0;margin-right:6px}.select2-container--humhub[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.has-warning .select2-dropdown,.has-warning .select2-selection{border-color:#fdd198}.has-warning .select2-container--focus .select2-selection,.has-warning .select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fffefc;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fffefc;border-color:#fcbb66}.has-warning.select2-drop-active{border-color:#fcbb66}.has-warning.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#fcbb66}.has-error .select2-dropdown,.has-error .select2-selection{border-color:#ff8989}.has-error .select2-container--focus .select2-selection,.has-error .select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffefef;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffefef;border-color:#ff5656}.has-error.select2-drop-active{border-color:#ff5656}.has-error.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#ff5656}.has-success .select2-dropdown,.has-success .select2-selection{border-color:#97d271}.has-success .select2-container--focus .select2-selection,.has-success .select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d0ebbe;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d0ebbe;border-color:#7bc64a}.has-success.select2-drop-active{border-color:#7bc64a}.has-success.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#7bc64a}.input-group .select2-container--humhub{display:table;table-layout:fixed;position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group.select2-humhub-prepend .select2-container--humhub .select2-selection{border-bottom-left-radius:0;border-top-left-radius:0}.input-group.select2-humhub-append .select2-container--humhub .select2-selection{border-bottom-right-radius:0;border-top-right-radius:0}.select2-humhub-append .select2-container--humhub,.select2-humhub-prepend .select2-container--humhub,.select2-humhub-append .input-group-btn,.select2-humhub-prepend .input-group-btn,.select2-humhub-append .input-group-btn .btn,.select2-humhub-prepend .input-group-btn .btn{vertical-align:top}.form-control.select2-hidden-accessible{position:absolute !important;width:1px !important}.form-inline .select2-container--humhub{display:inline-block}ul.tag_input{list-style:none;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;padding:0 0 9px 4px}ul.tag_input li img{margin:0 5px 0 0}.tag_input_field{outline:none;border:none !important;padding:5px 4px 0 !important;width:170px;margin:2px 0 0 !important}.userInput,.spaceInput{background-color:#6fdbe8;font-weight:600;color:#fff;border-radius:3px;font-size:12px !important;padding:2px;float:left;margin:3px 4px 0 0}.userInput i,.spaceInput i{padding:0 6px;font-size:14px;cursor:pointer;line-height:8px} \ No newline at end of file +.colorDefault{color:#ededed}.backgroundDefault{background:#ededed}.borderDefault{border-color:#ededed}.colorPrimary{color:#708fa0 !important}.backgroundPrimary{background:#708fa0 !important}.borderPrimary{border-color:#708fa0 !important}.colorInfo{color:#6fdbe8 !important}.backgroundInfo{background:#6fdbe8 !important}.borderInfo{border-color:#6fdbe8 !important}.colorSuccess{color:#97d271 !important}.backgroundSuccess{background:#97d271 !important}.borderSuccess{border-color:#97d271 !important}.colorWarning{color:#fdd198 !important}.backgroundWarning{background:#fdd198 !important}.borderWarning{border-color:#fdd198 !important}.colorDanger{color:#ff8989 !important}.backgroundDanger{background:#ff8989 !important}.borderDanger{border-color:#ff8989 !important}.colorFont1{color:#bac2c7 !important}.colorFont2{color:#7a7a7a !important}.colorFont3{color:#555 !important}.colorFont4{color:#bebebe !important}.colorFont5{color:#aeaeae !important}.heading{font-size:16px;font-weight:300;color:#555;background-color:white;border:none;padding:10px}.text-center{text-align:center !important}.text-break{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.img-rounded{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body{padding-top:130px;background-color:#ededed;color:#777;font-family:'Open Sans',sans-serif}body a,body a:hover,body a:focus,body a:active,body a.active{color:#555;text-decoration:none}@media (max-width:920px){body{padding-top:115px}}@media (min-width:768px) and (max-width:920px){body{padding-top:120px}}a:hover{text-decoration:none}hr{margin-top:10px;margin-bottom:10px}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{position:inherit}.layout-content-container,.layout-nav-container{padding:0 10px 0 15px}.layout-sidebar-container{padding:0 15px 0 5px}@media (max-width:768px){.layout-nav-container .left-navigation{margin-bottom:0px}.layout-nav-container,.layout-content-container{padding:0px 15px}}@media (min-width:768px) and (max-width:920px){#topbar-first .container,#topbar-second .container{padding-left:10px;padding-right:20px}}h4{font-weight:300;font-size:150%}input[type=text],input[type=password],input[type=select]{-webkit-appearance:none;-moz-appearance:none;appearance:none}.powered,.powered a{color:#b8c7d3 !important}.langSwitcher{display:inline-block}[data-ui-show-more]{overflow:hidden}.topbar{position:fixed;display:block;height:50px;width:100%;padding-left:15px;padding-right:15px}.topbar ul.nav{float:left}.topbar ul.nav>li{float:left}.topbar ul.nav>li>a{padding-top:15px;padding-bottom:15px;line-height:20px}.topbar .dropdown-footer{margin:10px}.topbar .dropdown-header{font-size:16px;padding:3px 10px;margin-bottom:10px;font-weight:300;color:#bebebe}.topbar .dropdown-header .dropdown-header-link{position:absolute;top:2px;right:10px}.topbar .dropdown-header .dropdown-header-link a{color:#6fdbe8 !important;font-size:12px;font-weight:normal}.topbar .dropdown-header:hover{color:#bebebe}#topbar-first{background-color:#708fa0;top:0;z-index:1030;color:white}#topbar-first .nav>li>a:hover,#topbar-first .nav>.open>a{background-color:#8fa7b4}#topbar-first .nav>.account{height:50px;margin-left:20px}#topbar-first .nav>.account img{margin-left:10px}#topbar-first .nav>.account .dropdown-toggle{padding:10px 5px 8px;line-height:1.1em;text-align:left}#topbar-first .nav>.account .dropdown-toggle span{font-size:12px}#topbar-first .topbar-brand{position:relative;z-index:2}#topbar-first .topbar-actions{position:relative;z-index:3}#topbar-first .notifications{position:absolute;left:0;right:0;text-align:center;z-index:1}#topbar-first .notifications .btn-group{position:relative;text-align:left}#topbar-first .notifications .btn-group>a{padding:5px 10px;margin:10px 2px;display:inline-block;border-radius:2px;text-decoration:none;text-align:left}#topbar-first .notifications .btn-group>.label{position:absolute;top:4px;right:-2px}#topbar-first .notifications .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;border-width:10px;content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff;z-index:1035}#topbar-first .notifications .arrow{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;z-index:1001;border-width:11px;left:50%;margin-left:-18px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.15);top:-19px;z-index:1035}#topbar-first .notifications .dropdown-menu{width:350px;margin-left:-148px}#topbar-first .notifications .dropdown-menu ul.media-list{max-height:400px;overflow:auto}#topbar-first .notifications .dropdown-menu li{position:relative}#topbar-first .notifications .dropdown-menu li i.approval{position:absolute;left:2px;top:36px;font-size:14px}#topbar-first .notifications .dropdown-menu li i.accepted{color:#5cb85c}#topbar-first .notifications .dropdown-menu li i.declined{color:#d9534f}#topbar-first .notifications .dropdown-menu li .media{position:relative}#topbar-first .notifications .dropdown-menu li .media .img-space{position:absolute;top:14px;left:14px}#topbar-first .dropdown-footer{margin:10px 10px 5px}#topbar-first a{color:white}#topbar-first .caret{border-top-color:#bebebe}#topbar-first .btn-group>a{background-color:#7f9baa}#topbar-first .btn-enter{background-color:#7f9baa;margin:6px 0}#topbar-first .btn-enter:hover{background-color:#89a2b0}#topbar-first .media-list a{color:#555;padding:0}#topbar-first .media-list li{color:#555}#topbar-first .media-list li i.accepted{color:#6fdbe8 !important}#topbar-first .media-list li i.declined{color:#ff8989 !important}#topbar-first .media-list li.placeholder{border-bottom:none}#topbar-first .media-list .media .media-body .label{padding:0.1em 0.5em}#topbar-first .account .user-title{text-align:right}#topbar-first .account .user-title span{color:#d7d7d7}#topbar-first .dropdown.account>a,#topbar-first .dropdown.account.open>a,#topbar-first .dropdown.account>a:hover,#topbar-first .dropdown.account.open>a:hover{background-color:#708fa0}#topbar-second{top:50px;background-color:#fff;z-index:1029;background-image:none;-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1);border-bottom:1px solid #d4d4d4}#topbar-second .dropdown-menu{padding-top:0;padding-bottom:0}#topbar-second .dropdown-menu .divider{margin:0}#topbar-second #space-menu-dropdown,#topbar-second #search-menu-dropdown{width:400px}#topbar-second #space-menu-dropdown .media-list,#topbar-second #search-menu-dropdown .media-list{max-height:400px;overflow:auto}@media screen and (max-width:768px){#topbar-second #space-menu-dropdown .media-list,#topbar-second #search-menu-dropdown .media-list{max-height:200px}}#topbar-second #space-menu-dropdown form,#topbar-second #search-menu-dropdown form{margin:10px}#topbar-second #space-menu-dropdown .search-reset,#topbar-second #search-menu-dropdown .search-reset{position:absolute;color:#BFBFBF;margin:7px;top:0px;right:40px;z-index:10;display:none;cursor:pointer}#topbar-second .nav>li>a{padding:7px 13px 0;text-decoration:none;text-shadow:none;font-weight:600;font-size:10px;min-height:50px;text-transform:uppercase;text-align:center}#topbar-second .nav>li>a:hover,#topbar-second .nav>li>a:active,#topbar-second .nav>li>a:focus{border-bottom:3px solid #6fdbe8;background-color:#f7f7f7;color:#555;text-decoration:none}#topbar-second .nav>li>a i{font-size:14px}#topbar-second .nav>li>a .caret{border-top-color:#7a7a7a}#topbar-second .nav>li.active>a{min-height:47px}#topbar-second .nav>li>ul>li>a{border-left:3px solid #fff;background-color:#fff;color:#555}#topbar-second .nav>li>ul>li>a:hover,#topbar-second .nav>li>ul>li>a.active{border-left:3px solid #6fdbe8;background-color:#f7f7f7;color:#555}#topbar-second .nav>li>a#space-menu{padding-right:13px;border-right:1px solid #ededed}#topbar-second .nav>li>a#search-menu{padding-top:15px}#topbar-second .nav>li>a:hover,#topbar-second .nav .open>a,#topbar-second .nav>li.active{border-bottom:3px solid #6fdbe8;background-color:#f7f7f7;color:#555}#topbar-second .nav>li.active>a:hover{border-bottom:none}#topbar-second #space-menu-dropdown li>ul>li>a>.media .media-body p{color:#bebebe;font-size:11px;margin:0;font-weight:400}@media (max-width:767px){.topbar{padding-left:0;padding-right:0}}.login-container{background-color:#708fa0;background-image:linear-gradient(to right, #708fa0 0%, #8fa7b4 50%, #8fa7b4 100%),linear-gradient(to right, #7f9baa 0%, #bdcbd3 51%, #adbfc9 100%);background-size:100% 100%;position:relative;padding-top:40px}.login-container .text{color:#fff;font-size:12px;margin-bottom:15px}.login-container .text a{color:#fff;text-decoration:underline}.login-container .panel a{color:#6fdbe8}.login-container h1,.login-container h2{color:#fff !important}.login-container .panel{box-shadow:0 0 15px #627d92;-moz-box-shadow:0 0 15px #627d92;-webkit-box-shadow:0 0 15px #627d92}.login-container .panel .panel-heading,.login-container .panel .panel-body{padding:15px}.login-container select{color:#555}#account-login-form .form-group{margin-bottom:10px}.dropdown-menu li a{font-size:13px !important;font-weight:600 !important}.dropdown-menu li a i{margin-right:5px;font-size:14px;display:inline-block;width:14px}.dropdown-menu li a:hover,.dropdown-menu li a:visited,.dropdown-menu li a:hover,.dropdown-menu li a:focus{background:none;cursor:pointer}.dropdown-menu li:hover,.dropdown-menu li.selected{color:#555}.dropdown-menu li:first-child{margin-top:3px}.dropdown-menu li:last-child{margin-bottom:3px}.modal .dropdown-menu,.panel .dropdown-menu,.nav-tabs .dropdown-menu{border:1px solid #d7d7d7}.modal .dropdown-menu li.divider,.panel .dropdown-menu li.divider,.nav-tabs .dropdown-menu li.divider{background-color:#f7f7f7;border-bottom:none;margin:9px 1px !important}.modal .dropdown-menu li,.panel .dropdown-menu li,.nav-tabs .dropdown-menu li{border-left:3px solid white}.modal .dropdown-menu li a,.panel .dropdown-menu li a,.nav-tabs .dropdown-menu li a{color:#555;font-size:14px;font-weight:400;padding:4px 15px}.modal .dropdown-menu li a i,.panel .dropdown-menu li a i,.nav-tabs .dropdown-menu li a i{margin-right:5px}.modal .dropdown-menu li a:hover,.panel .dropdown-menu li a:hover,.nav-tabs .dropdown-menu li a:hover{background:none}.modal .dropdown-menu li:hover,.panel .dropdown-menu li:hover,.nav-tabs .dropdown-menu li:hover,.modal .dropdown-menu li.selected,.panel .dropdown-menu li.selected,.nav-tabs .dropdown-menu li.selected{border-left:3px solid #6fdbe8;background-color:#f7f7f7 !important}ul.contextMenu{border:1px solid #d7d7d7}ul.contextMenu li.divider{background-color:#f7f7f7;border-bottom:none;margin:9px 1px !important}ul.contextMenu li{border-left:3px solid white}ul.contextMenu li a{color:#555;font-size:14px;font-weight:400;padding:4px 15px}ul.contextMenu li a i{margin-right:5px}ul.contextMenu li a:hover{background:none}ul.contextMenu li:hover,ul.contextMenu li.selected{border-left:3px solid #6fdbe8;background-color:#f7f7f7 !important}.media-list li{padding:10px;border-bottom:1px solid #eee;position:relative;border-left:3px solid white;font-size:12px}.media-list li a{color:#555}.media-list .badge-space-type{background-color:#f7f7f7;border:1px solid #d7d7d7;color:#b2b2b2;padding:3px 3px 2px 3px}.media-list li.new{border-left:3px solid #f3fcfd;background-color:#f3fcfd}.media-list li:hover,.media-list li.selected{background-color:#f7f7f7;border-left:3px solid #6fdbe8}.media-list li.placeholder{font-size:14px !important;border-bottom:none}.media-list li.placeholder:hover{background:none !important;border-left:3px solid white}.media-left,.media>.pull-left{padding-right:0;margin-right:10px}.media:after{content:'';clear:both;display:block}.media .time{font-size:11px;color:#bebebe}.media .img-space{position:absolute;top:35px;left:35px}.media .media-body{font-size:13px}.media .media-body h4.media-heading{font-size:14px;font-weight:500;color:#555}.media .media-body h4.media-heading a{color:#555}.media .media-body h4.media-heading small,.media .media-body h4.media-heading small a{font-size:11px;color:#bebebe}.media .media-body h4.media-heading .content{margin-right:35px}.media .media-body .content a{word-break:break-all}.media .media-body h5{color:#aeaeae;font-weight:300;margin-top:5px;margin-bottom:5px;min-height:15px}.media .media-body .module-controls{font-size:85%}.media .media-body .module-controls a{color:#6fdbe8}.media .content a{color:#6fdbe8}.media .content .files a{color:#555}.content span{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.panel{border:none;background-color:#fff;box-shadow:0 0 3px #dadada;-webkit-box-shadow:0 0 3px #dadada;-moz-box-shadow:0 0 3px #dadada;border-radius:4px;position:relative;margin-bottom:15px}.panel h1{font-size:16px;font-weight:300;margin-top:0;color:#555}.panel .panel-heading{font-size:16px;font-weight:300;color:#555;background-color:white;border:none;padding:10px;border-radius:4px}.panel .panel-heading .heading-link{color:#6fdbe8 !important;font-size:0.8em}.panel .panel-body{padding:10px;font-size:13px}.panel .panel-body p{color:#555}.panel .statistics .entry{margin-left:20px;font-size:12px}.panel .statistics .entry .count{color:#6fdbe8;font-weight:600;font-size:20px;line-height:0.8em}.panel h3.media-heading small{font-size:75%}.panel h3.media-heading small a{color:#6fdbe8}.panel-danger{border:2px solid #ff8989}.panel-danger .panel-heading{color:#ff8989}.panel-success{border:2px solid #97d271}.panel-success .panel-heading{color:#97d271}.panel-warning{border:2px solid #fdd198}.panel-warning .panel-heading{color:#fdd198}.panel.profile{position:relative}.panel.profile .controls{position:absolute;top:10px;right:10px}.panel.members .panel-body a img,.panel.groups .panel-body a img,.panel.follower .panel-body a img,.panel.spaces .panel-body a img{margin-bottom:5px}.panel-profile .panel-profile-header{position:relative;border:3px solid #fff;border-top-right-radius:3px;border-top-left-radius:3px}.panel-profile .panel-profile-header .img-profile-header-background{border-radius:3px;min-height:110px}.panel-profile .panel-profile-header .img-profile-data{position:absolute;height:100px;width:100%;bottom:0;left:0;padding-left:180px;padding-top:30px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;color:#fff;pointer-events:none;background:-moz-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0,0,0,0)), color-stop(1%, rgba(0,0,0,0)), color-stop(100%, rgba(0,0,0,0.38)));background:-webkit-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);background:-o-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);background:-ms-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);background:linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 1%, rgba(0,0,0,0.38) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#94000000', GradientType=0)}.panel-profile .panel-profile-header .img-profile-data h1{font-size:30px;font-weight:100;margin-bottom:7px;color:#fff;max-width:600px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.panel-profile .panel-profile-header .img-profile-data h2{font-size:16px;font-weight:400;margin-top:0}.panel-profile .panel-profile-header .img-profile-data h1.space{font-size:30px;font-weight:700}.panel-profile .panel-profile-header .img-profile-data h2.space{font-size:13px;font-weight:300;max-width:600px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.panel-profile .panel-profile-header .profile-user-photo-container{position:absolute;bottom:-50px;left:15px}.panel-profile .panel-profile-header .profile-user-photo-container .profile-user-photo{border:3px solid #fff;border-radius:5px}.panel-profile .panel-profile-controls{padding-left:160px}.panel.pulse,.panel.fadeIn{-webkit-animation-duration:200ms;-moz-animation-duration:200ms;animation-duration:200ms}@media (max-width:767px){.panel-profile-controls{padding-left:0 !important;padding-top:50px}.panel-profile .panel-profile-header .img-profile-data h1{font-size:20px !important}}.panel-body>.tab-menu{margin-left:-10px;margin-right:-10px}.installer .logo{text-align:center}.installer h2{font-weight:100}.installer .panel{margin-top:50px}.installer .panel h3{margin-top:0}.installer .powered,.installer .powered a{color:#bac2c7 !important;margin-top:10px;font-size:12px}.installer .fa{width:18px}.installer .check-ok{color:#97d271}.installer .check-warning{color:#fdd198}.installer .check-error{color:#ff8989}.installer .prerequisites-list ul{list-style:none;padding-left:15px}.installer .prerequisites-list ul li{padding-bottom:5px}.pagination-container{text-align:center}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{background-color:#708fa0;border-color:#708fa0}.pagination>li>a,.pagination>li>span,.pagination>li>a:hover,.pagination>li>a:active,.pagination>li>a:focus{color:#555;cursor:pointer}.well-small{padding:10px;border-radius:3px}.well{border:none;box-shadow:none;background-color:#ededed;margin-bottom:1px}.well hr{margin:15px 0 10px;border-top:1px solid #d9d9d9}.well table>thead{font-size:11px}.tab-sub-menu{padding-left:10px}.tab-sub-menu li>a:hover,.tab-sub-menu li>a:focus{background-color:#f7f7f7;border-bottom-color:#ddd}.tab-sub-menu li.active>a{background-color:#fff;border-bottom-color:transparent}.tab-menu{padding-top:10px;background-color:#fff}.tab-menu .nav-tabs{padding-left:10px}.tab-menu .nav-tabs li>a{padding-top:12px;border-color:#ddd;border-bottom:1px solid #ddd;background-color:#f7f7f7;max-height:41px;outline:none}.tab-menu .nav-tabs li>a:hover,.tab-menu .nav-tabs li>a:focus{padding-top:10px;border-top:3px solid #ddd}.tab-menu .nav-tabs li>a:hover{background-color:#f7f7f7}.tab-menu .nav-tabs li.active>a,.tab-menu .nav-tabs li.active>a:hover{padding-top:10px;border-top:3px solid #6fdbe8}.tab-menu .nav-tabs li.active>a{background-color:#fff;border-bottom-color:transparent}ul.tab-menu{padding-top:10px;background-color:#fff;padding-left:10px}ul.tab-menu-settings li>a{padding-top:12px;border-color:#ddd;border-bottom:1px solid #ddd;background-color:#f7f7f7;max-height:41px;outline:none}ul.tab-menu-settings li>a:hover,ul.tab-menu-settings li>a:focus{padding-top:10px;border-top:3px solid #ddd !important}ul.tab-menu-settings li>a:hover{background-color:#f7f7f7}ul.tab-menu-settings li.active>a,ul.tab-menu-settings li.active>a:hover,ul.tab-menu-settings li.active>a:focus{padding-top:10px;border-top:3px solid #6fdbe8 !important}ul.tab-menu-settings li.active>a{background-color:#fff;border-bottom-color:transparent !important}.nav-pills .dropdown-menu,.nav-tabs .dropdown-menu,.account .dropdown-menu{background-color:#708fa0;border:none}.nav-pills .dropdown-menu li.divider,.nav-tabs .dropdown-menu li.divider,.account .dropdown-menu li.divider{background-color:#628394;border-bottom:none;margin:9px 1px !important}.nav-pills .dropdown-menu li,.nav-tabs .dropdown-menu li,.account .dropdown-menu li{border-left:3px solid #708fa0}.nav-pills .dropdown-menu li a,.nav-tabs .dropdown-menu li a,.account .dropdown-menu li a{color:white;font-weight:400;font-size:13px;padding:4px 15px}.nav-pills .dropdown-menu li a i,.nav-tabs .dropdown-menu li a i,.account .dropdown-menu li a i{margin-right:5px;font-size:14px;display:inline-block;width:14px}.nav-pills .dropdown-menu li a:hover,.nav-tabs .dropdown-menu li a:hover,.account .dropdown-menu li a:hover,.nav-pills .dropdown-menu li a:visited,.nav-tabs .dropdown-menu li a:visited,.account .dropdown-menu li a:visited,.nav-pills .dropdown-menu li a:hover,.nav-tabs .dropdown-menu li a:hover,.account .dropdown-menu li a:hover,.nav-pills .dropdown-menu li a:focus,.nav-tabs .dropdown-menu li a:focus,.account .dropdown-menu li a:focus{background:none}.nav-pills .dropdown-menu li:hover,.nav-tabs .dropdown-menu li:hover,.account .dropdown-menu li:hover,.nav-pills .dropdown-menu li.selected,.nav-tabs .dropdown-menu li.selected,.account .dropdown-menu li.selected{border-left:3px solid #6fdbe8;color:#fff !important;background-color:#628394 !important}.nav-pills.preferences .dropdown .dropdown-toggle{color:#bebebe}.nav-pills.preferences .dropdown.open .dropdown-toggle,.nav-pills.preferences .dropdown.open .dropdown-toggle:hover{background-color:#708fa0}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{background-color:#708fa0}.nav-tabs{margin-bottom:10px}.list-group a [class^="fa-"],.list-group a [class*=" fa-"]{display:inline-block;width:18px}.nav-pills.preferences{position:absolute;right:10px;top:10px}.nav-pills.preferences .dropdown .dropdown-toggle{padding:2px 10px}.nav-pills.preferences .dropdown.open .dropdown-toggle,.nav-pills.preferences .dropdown.open .dropdown-toggle:hover{color:white}.nav-tabs li{font-weight:600;font-size:12px}.tab-content .tab-pane a{color:#6fdbe8}.tab-content .tab-pane .form-group{margin-bottom:5px}.nav-tabs.tabs-center li{float:none;display:inline-block}.nav-tabs.tabs-small li>a{padding:5px 7px}.nav .caret,.nav .caret:hover,.nav .caret:active{border-top-color:#555;border-bottom-color:#555;height:6.928px}.nav li.dropdown>a:hover .caret,.nav li.dropdown>a:active .caret{border-top-color:#555;border-bottom-color:#555}.nav .open>a .caret,.nav .open>a:hover .caret,.nav .open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{border-color:#ededed;color:#555}.nav .open>a .caret,.nav .open>a:hover .caret,.nav .open>a:focus .caret{color:#555}.footer-nav{filter:opacity(.6);font-size:12px;text-align:center}@media (max-width:991px){.controls-header{text-align:left !important}}.btn{float:none;border:none;-webkit-box-shadow:none;box-shadow:none;-moz-box-shadow:none;background-image:none;text-shadow:none;border-radius:3px;outline:none !important;margin-bottom:0;font-size:14px;font-weight:600;padding:8px 16px}.input.btn{outline:none}.btn-lg{padding:16px 28px}.btn-sm{padding:4px 8px;font-size:12px}.btn-sm i{font-size:14px}.btn-xs{padding:1px 5px;font-size:12px}.btn-default{background:#ededed;color:#7a7a7a !important}.btn-default:hover,.btn-default:focus{background:#e8e8e8;text-decoration:none;color:#7a7a7a}.btn-default:active,.btn-default.active{outline:0;background:#e0e0e0}.btn-default[disabled],.btn-default.disabled{background:#f2f2f2}.btn-default[disabled]:hover,.btn-default.disabled:hover,.btn-default[disabled]:focus,.btn-default.disabled:focus{background:#f2f2f2}.btn-default[disabled]:active,.btn-default.disabled:active,.btn-default[disabled].active,.btn-default.disabled.active{background:#f2f2f2}.btn-primary{background:#708fa0;color:#fff !important}.btn-primary:hover,.btn-primary:focus{background:#628394;text-decoration:none}.btn-primary:active,.btn-primary.active{outline:0;background:#628394 !important}.btn-primary[disabled],.btn-primary.disabled{background:#7f9baa}.btn-primary[disabled]:hover,.btn-primary.disabled:hover,.btn-primary[disabled]:focus,.btn-primary.disabled:focus{background:#7f9baa}.btn-primary[disabled]:active,.btn-primary.disabled:active,.btn-primary[disabled].active,.btn-primary.disabled.active{background:#7f9baa !important}.btn-info{background:#6fdbe8;color:#fff !important}.btn-info:hover,.btn-info:focus{background:#59d6e4 !important;text-decoration:none}.btn-info:active,.btn-info.active{outline:0;background:#59d6e4}.btn-info[disabled],.btn-info.disabled{background:#85e0ec}.btn-info[disabled]:hover,.btn-info.disabled:hover,.btn-info[disabled]:focus,.btn-info.disabled:focus{background:#85e0ec}.btn-info[disabled]:active,.btn-info.disabled:active,.btn-info[disabled].active,.btn-info.disabled.active{background:#85e0ec !important}.btn-danger{background:#ff8989;color:#fff !important}.btn-danger:hover,.btn-danger:focus{background:#ff6f6f;text-decoration:none}.btn-danger:active,.btn-danger.active{outline:0;background:#ff6f6f !important}.btn-danger[disabled],.btn-danger.disabled{background:#ffa3a3}.btn-danger[disabled]:hover,.btn-danger.disabled:hover,.btn-danger[disabled]:focus,.btn-danger.disabled:focus{background:#ffa3a3}.btn-danger[disabled]:active,.btn-danger.disabled:active,.btn-danger[disabled].active,.btn-danger.disabled.active{background:#ffa3a3 !important}.btn-success{background:#97d271;color:#fff !important}.btn-success:hover,.btn-success:focus{background:#89cc5e;text-decoration:none}.btn-success:active,.btn-success.active{outline:0;background:#89cc5e !important}.btn-success[disabled],.btn-success.disabled{background:#a5d884}.btn-success[disabled]:hover,.btn-success.disabled:hover,.btn-success[disabled]:focus,.btn-success.disabled:focus{background:#a5d884}.btn-success[disabled]:active,.btn-success.disabled:active,.btn-success[disabled].active,.btn-success.disabled.active{background:#a5d884 !important}.btn-warning{background:#fdd198;color:#fff !important}.btn-warning:hover,.btn-warning:focus{background:#fdcd8e;text-decoration:none}.btn-warning:active,.btn-warning.active{outline:0;background:#fdcd8e !important}.btn-warning[disabled],.btn-warning.disabled{background:#fddcb1}.btn-warning[disabled]:hover,.btn-warning.disabled:hover,.btn-warning[disabled]:focus,.btn-warning.disabled:focus{background:#fddcb1}.btn-warning[disabled]:active,.btn-warning.disabled:active,.btn-warning[disabled].active,.btn-warning.disabled.active{background:#fddcb1 !important}.radio,.checkbox{margin-top:5px !important;margin-bottom:0}.radio label,.checkbox label{padding-left:10px}.form-control{border:2px solid #ededed;box-shadow:none;min-height:35px}.form-control:focus{border:2px solid #6fdbe8;outline:0;box-shadow:none}.form-control.form-search{border-radius:30px;background-image:url("../img/icon_search16x16.png");background-repeat:no-repeat;background-position:10px 8px;padding-left:34px}.form-group-search{position:relative}.form-group-search .form-button-search{position:absolute;top:4px;right:4px;border-radius:30px}textarea{resize:none;height:1.5em}select.form-control:not([multiple]){-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("../img/select_arrow.png") !important;background-repeat:no-repeat;background-position:right 13px;overflow:hidden}label{font-weight:normal}label.control-label{font-weight:bold}::-webkit-input-placeholder{color:#bebebe !important}::-moz-placeholder{color:#bebebe !important}:-ms-input-placeholder{color:#bebebe !important}input:-moz-placeholder{color:#bebebe !important}.placeholder{padding:10px}input.placeholder,textarea.placeholder{padding:0 0 0 10px;color:#999}.help-block-error{font-size:12px}.hint-block,.help-block:not(.help-block-error){color:#aeaeae !important;font-size:12px}.hint-block:hover,.help-block:not(.help-block-error):hover{color:#7a7a7a !important;font-size:12px}.input-group-addon{border:none}a.input-field-addon{font-size:12px;float:right;margin-top:-10px}a.input-field-addon-sm{font-size:11px;float:right;margin-top:-10px}.timeZoneInputContainer{padding-top:10px}.timeZoneInputContainer~.help-block{margin:0px}.label{text-transform:uppercase}.label{text-transform:uppercase;display:inline-block;padding:3px 5px 4px;font-weight:600;font-size:10px !important;color:white !important;vertical-align:baseline;white-space:nowrap;text-shadow:none}.label-default{background:#ededed;color:#7a7a7a !important}a.label-default:hover{background:#e0e0e0 !important}.label-info{background-color:#6fdbe8}a.label-info:hover{background:#59d6e4 !important}.label-danger{background-color:#ff8989}a.label-danger:hover{background:#ff6f6f !important}.label-success{background-color:#97d271}a.label-success:hover{background:#89cc5e !important}.label-warning{background-color:#fdd198}a.label-warning:hover{background:#fdc67f !important}.regular-checkbox:checked+.regular-checkbox-box{border:2px solid #6fdbe8;background:#6fdbe8;color:white}.regular-checkbox-box.disabled{background:#d7d7d7 !important;border:2px solid #d7d7d7 !important;cursor:not-allowed}.regular-radio:checked+.regular-radio-button:after{background:#6fdbe8}.regular-radio:checked+.regular-radio-button{background-color:none;color:#99a1a7;border:2px solid #d7d7d7;margin-right:5px}.regular-radio.disabled{background:#d7d7d7 !important;border:2px solid #d7d7d7 !important;cursor:not-allowed}.errorMessage{color:#ff8989;padding:10px 0}.error{border-color:#ff8989 !important}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#ff8989 !important}.has-error .form-control,.has-error .form-control:focus{border-color:#ff8989;-webkit-box-shadow:none;box-shadow:none}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#97d271}.has-success .form-control,.has-success .form-control:focus{border-color:#97d271;-webkit-box-shadow:none;box-shadow:none}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#fdd198}.has-warning .form-control,.has-warning .form-control:focus{border-color:#fdd198;-webkit-box-shadow:none;box-shadow:none}.bootstrap-timepicker-widget .form-control{padding:0px}#notification_overview_filter label{display:block}#notification_overview_list .img-space{position:absolute;top:25px;left:25px}@media (max-width:767px){.notifications{position:inherit !important;float:left !important}.notifications .dropdown-menu{width:300px !important;margin-left:0 !important}.notifications .dropdown-menu .arrow{margin-left:-142px !important}}.badge-space{margin-top:6px}.badge-space-chooser{padding:3px 5px;margin-left:1px}.badge{padding:3px 5px;border-radius:2px;font-weight:normal;font-family:Arial,sans-serif;font-size:10px !important;text-transform:uppercase;color:#fff;vertical-align:baseline;white-space:nowrap;text-shadow:none;background-color:#d7d7d7;line-height:1}.popover{border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);-moz-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175)}.popover .popover-title{background:none;border-bottom:none;color:#555;font-weight:300;font-size:16px;padding:15px}.popover .popover-content{font-size:13px;padding:5px 15px;color:#555}.popover .popover-content a{color:#6fdbe8}.popover .popover-content img{max-width:100%}.popover .popover-navigation{padding:15px}.list-group-item{padding:6px 15px;border:none;border-width:0 !important;border-left:3px solid #fff !important;font-size:12px;font-weight:600}.list-group-item i{font-size:14px}a.list-group-item:hover,a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#555;background-color:#f7f7f7;border-left:3px solid #6fdbe8 !important}@media (max-width:991px){.list-group{margin-left:4px}.list-group-item{display:inline-block !important;border-radius:3px !important;margin:4px 0;margin-bottom:4px !important}.list-group-item{border:none !important}a.list-group-item:hover,a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{border:none !important;background:#708fa0 !important;color:#fff !important}}@media screen and (max-width:768px){.modal-dialog{width:auto !important;padding-top:30px;padding-bottom:30px}}.modal-top{z-index:999999 !important}.modal{overflow-y:visible}.modal-dialog-extra-small{width:400px}.modal-dialog-small{width:500px}.modal-dialog-normal{width:600px}.modal-dialog-medium{width:768px}.modal-dialog-large{width:900px}@media screen and (max-width:920px){.modal-dialog-large{width:auto !important;padding-top:30px;padding-bottom:30px}}.modal{border:none}.modal h1,.modal h2,.modal h3,.modal h4,.modal h5{margin-top:20px;color:#555;font-weight:300}.modal h4.media-heading{margin-top:0}.modal-title{font-size:20px;font-weight:200;color:#555}.modal-dialog,.modal-content{min-width:150px}.modal-content{-webkit-border-radius:3px;-moz-border-radius:3px;box-shadow:0 2px 26px rgba(0,0,0,0.3),0 0 0 1px rgba(0,0,0,0.1);-webkit-box-shadow:0 2px 26px rgba(0,0,0,0.3),0 0 0 1px rgba(0,0,0,0.1);-moz-box-shadow:0 2px 26px rgba(0,0,0,0.3),0 0 0 1px rgba(0,0,0,0.1);border:none}.modal-content .modal-header{padding:20px 20px 0;border-bottom:none;text-align:center}.modal-content .modal-header .close{margin-top:2px;margin-right:5px}.modal-content .modal-body{padding:20px;font-size:13px}.modal-content .modal-footer{margin-top:0;text-align:left;padding:10px 20px 30px;border-top:none;text-align:center}.modal-content .modal-footer hr{margin-top:0}.modal-backdrop{background-color:rgba(0,0,0,0.5)}.modal-dialog.fadeIn,.modal-dialog.pulse{-webkit-animation-duration:200ms;-moz-animation-duration:200ms;animation-duration:200ms}.module-installed{opacity:0.5}.module-installed .label-success{background-color:#d7d7d7}.tooltip-inner{background-color:#708fa0;max-width:400px;text-align:left;font-weight:300;padding:2px 8px 4px;font-weight:bold;white-space:pre-wrap}.tooltip.top .tooltip-arrow{border-top-color:#708fa0}.tooltip.top-left .tooltip-arrow{border-top-color:#708fa0}.tooltip.top-right .tooltip-arrow{border-top-color:#708fa0}.tooltip.right .tooltip-arrow{border-right-color:#708fa0}.tooltip.left .tooltip-arrow{border-left-color:#708fa0}.tooltip.bottom .tooltip-arrow{border-bottom-color:#708fa0}.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#708fa0}.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#708fa0}.tooltip.in{opacity:1;filter:alpha(opacity=100)}.progress{height:10px;margin-bottom:15px;box-shadow:none;background:#ededed;border-radius:10px}.progress-bar-info{background-color:#6fdbe8;-webkit-box-shadow:none;box-shadow:none}#nprogress .bar{height:2px;background:#6fdbe8}table{margin-bottom:0px !important}table th{font-size:11px;color:#bebebe;font-weight:normal}table thead tr th{border:none !important}table .time{font-size:12px}table td a:hover{color:#6fdbe8}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:10px 10px 10px 0}.table>thead>tr>th select,.table>tbody>tr>th select,.table>tfoot>tr>th select,.table>thead>tr>td select,.table>tbody>tr>td select,.table>tfoot>tr>td select{font-size:12px;padding:4px 8px;height:30px;margin:0}.table-middle>thead>tr>th,.table-middle>tbody>tr>th,.table-middle>tfoot>tr>th,.table-middle>thead>tr>td,.table-middle>tbody>tr>td,.table-middle>tfoot>tr>td{vertical-align:middle !important}.comment-container{margin-top:10px}.comment-container .wall-entry-controls{margin-left:50px}.comment .media{position:relative !important;margin-top:0}.comment .media .nav-pills.preferences{display:none;right:-3px;top:-3px}.comment .media-body{overflow:visible}.comment .jp-progress{background-color:#dbdcdd !important}.comment .jp-play-bar{background:#cacaca}.comment .content a{color:#21bdd0}.comment.guest-mode .media:last-child .wall-entry-controls{margin-bottom:0;margin-left:50px}.comment.guest-mode .media:last-child hr{display:none}.comment_create,.content_edit{position:relative}.comment_create .comment-buttons,.content_edit .comment-buttons{position:absolute;bottom:2px;right:5px}.comment_create .btn-comment-submit,.content_edit .btn-comment-submit{margin-top:3px}.comment_create .fileinput-button,.content_edit .fileinput-button{float:left;padding:6px 10px;background:transparent !important}.comment_create .fileinput-button .fa,.content_edit .fileinput-button .fa{color:#d7d7d7}.comment_create .fileinput-button:hover .fa,.content_edit .fileinput-button:hover .fa{background:transparent !important;color:#b2b2b2}.comment_create .fileinput-button:active,.content_edit .fileinput-button:active{box-shadow:none !important}.post-richtext-input-group{position:relative}.post-richtext-input-group .comment-buttons{bottom:7px !important}.comment-container .content_edit{margin-left:50px}.comment_edit_content{margin-left:50px}.comment-message{overflow:hidden;overflow-wrap:break-word}.comment-create-input-group{position:relative}.comment-create-input-group .ProsemirrorEditor .ProseMirror{padding-right:72px}.comment-create-input-group.scrollActive .comment-buttons{right:22px}.grid-view img{width:24px;height:24px}.grid-view .filters input,.grid-view .filters select{border:2px solid #ededed;box-shadow:none;min-height:35px;border-radius:4px;font-size:12px;padding:4px}.grid-view .filters input:focus,.grid-view .filters select:focus{border:2px solid #6fdbe8;outline:0;box-shadow:none}.grid-view{padding:15px 0 0}.grid-view img{border-radius:3px}.grid-view table th{font-size:13px !important;font-weight:bold !important}.grid-view table td{vertical-align:middle !important}.grid-view table tr{font-size:13px !important}.grid-view table thead tr th:first-of-type{padding-left:5px}.grid-view table tbody tr{height:50px}.grid-view table tbody tr td:first-of-type{padding-left:5px}.grid-view .summary{font-size:12px;color:#bac2c7}.permission-grid-editor>.table>tbody>tr:first-child>td{border:none}.permission-grid-editor{padding-top:0px}.detail-view td,.detail-view th{padding:8px !important}.detail-view th{font-size:13px}.oembed_snippet{margin-top:10px;position:relative;padding-bottom:55%;padding-top:15px;height:0;overflow:hidden}.oembed_snippet iframe{position:absolute;top:0;left:0;width:100%;height:100%}.activities{max-height:400px;overflow:auto}.activities li .media{position:relative}.activities li .media .img-space{position:absolute;top:14px;left:14px}.activities li .media .media-body{max-width:295px}.contentForm_options{margin-top:10px;min-height:29px}.contentForm_options .btn_container{position:relative}.contentForm_options .btn_container .label-public{position:absolute;right:40px;top:11px}#content-topic-bar{margin-top:5px;text-align:right}#content-topic-bar .label{margin-left:4px}#contentFormError{color:#ff8989;padding-left:0;list-style:none}.placeholder-empty-stream{background-image:url("../img/placeholder-postform-arrow.png");background-repeat:no-repeat;padding:37px 0 0 70px;margin-left:90px}.wall-entry{position:relative}.wall-entry .content p,.wall-entry .content a{overflow:hidden;text-overflow:ellipsis;max-width:100%}.wall-entry .content img{max-width:100%}.wall-entry .media{overflow:visible}.wall-entry .well{margin-bottom:0}.wall-entry .well .comment .show-all-link{font-size:12px;cursor:pointer}.wall-entry .media-heading{font-size:14px;padding-top:1px;margin-bottom:3px}.wall-entry .media-heading .labels{padding-right:32px}.wall-entry .media-heading .viaLink{font-size:13px}.wall-entry .media-heading .viaLink i{color:#bebebe;padding-left:4px;padding-right:4px}.wall-entry .media-subheading{color:#bebebe;font-size:12px}.wall-entry .media-subheading .time{font-size:12px;white-space:nowrap}.wall-entry-controls,.wall-entry-controls a{font-size:11px;font-weight:700;color:#7a7a7a;margin-top:10px;margin-bottom:0}#wall-stream-filter-nav{font-size:12px;margin-bottom:10px;padding-top:2px;border-radius:0 0 4px 4px}#wall-stream-filter-nav .wall-stream-filter-root{margin:0;border:0 !important}#wall-stream-filter-nav .filter-panel{padding:0 10px}#wall-stream-filter-nav .wall-stream-filter-head{padding:5px 5px 10px 5px;border-bottom:1px solid #ddd}#wall-stream-filter-nav .wall-stream-filter-body{overflow:hidden;background-color:#f7f7f7;border:1px solid #ddd;border-top:0;border-radius:0 0 4px 4px}#wall-stream-filter-nav hr{margin:5px 0 0 0}#wall-stream-filter-nav .topic-remove-label{float:left}#wall-stream-filter-nav .topic-remove-label,#wall-stream-filter-nav .content-type-remove-label{margin-right:6px}#wall-stream-filter-nav .select2{width:260px !important;margin-bottom:5px;margin-top:2px}#wall-stream-filter-nav .select2 .select2-search__field{height:25px !important}#wall-stream-filter-nav .select2 .select2-selection__choice{height:23px !important}#wall-stream-filter-nav .select2 .select2-selection__choice span,#wall-stream-filter-nav .select2 .select2-selection__choice i{line-height:19px !important}#wall-stream-filter-nav .select2 .select2-selection__choice .img-rounded{width:18px !important;height:18px !important}#wall-stream-filter-nav .wall-stream-filter-bar{display:inline;float:right;white-space:normal}#wall-stream-filter-nav .wall-stream-filter-bar .label{height:18px;padding-top:4px}#wall-stream-filter-nav .wall-stream-filter-bar .btn,#wall-stream-filter-nav .wall-stream-filter-bar .label{box-shadow:0 0 2px #7a7a7a;-webkit-box-shadow:0 0 2px #7a7a7a;-moz-box-shadow:0 0 2px #7a7a7a}@media (max-width:767px){#wall-stream-filter-nav .wall-stream-filter-root{white-space:nowrap}#wall-stream-filter-nav .wall-stream-filter-body{overflow:auto}}.filter-root{margin:15px}.filter-root .row{display:table !important}.filter-root .filter-panel{padding:0 5px;display:table-cell !important;float:none}.filter-root .filter-panel .filter-block strong{margin-bottom:5px}.filter-root .filter-panel .filter-block ul.filter-list{list-style:none;padding:0;margin:0 0 5px}.filter-root .filter-panel .filter-block ul.filter-list li{font-size:12px;padding:2px}.filter-root .filter-panel .filter-block ul.filter-list li a{color:#555}.filter-root .filter-panel div.filter-block:last-of-type ul.filter-list{margin:0px}.filter-root .filter-panel+.filter-panel{border-left:2px solid #ededed}.stream-entry-loader{float:right;margin-top:5px}.load-suppressed{margin-top:-17px;margin-bottom:15px;text-align:center}.load-suppressed a{display:inline-block;background-color:white;padding:5px;border-radius:0 0 4px 4px;border:1px solid #ddd;font-size:11px}.space-owner{text-align:center;margin:14px 0;font-size:13px;color:#999}.space-member-sign{color:#97d271;position:absolute;top:42px;left:42px;font-size:16px;background:#fff;width:24px;height:24px;padding:2px 3px 1px 4px;border-radius:50px;border:2px solid #97d271}#space-menu-dropdown i.type{font-size:16px;color:#BFBFBF}#space-menu-spaces [data-space-chooser-item]{cursor:pointer}#space-menu-dropdown .input-group-addon{border-radius:0px 4px 4px 0px}#space-menu-dropdown .input-group-addon.focus{border-radius:0px 4px 4px 0px;border:2px solid #6fdbe8;border-left:0px}#space-menu-search{border-right:0px}#space-directory-link i{margin-right:0px}.space-acronym{color:#fff;text-align:center;display:inline-block}.current-space-image{margin-right:3px;margin-top:3px}@media (max-width:767px){#space-menu>.title{display:none}#space-menu-dropdown{width:300px !important}}.files,#postFormFiles_list{padding-left:0}.contentForm-upload-list{padding-left:0}.contentForm-upload-list li:first-child{margin-top:10px}.file_upload_remove_link,.file_upload_remove_link:hover{color:#ff8989;cursor:pointer}.file-preview-item{text-overflow:ellipsis;overflow:hidden}.post-files{margin-top:10px}.post-files img{vertical-align:top;margin-bottom:3px;margin-right:5px;max-height:100%;-webkit-animation-duration:2s;animation-duration:2s}#wallStream.mobile .post-files{margin-top:10px;display:flex;overflow-x:auto}#wallStream.mobile .post-files img{max-width:190px}.file-preview-content{cursor:pointer}.image-upload-container{position:relative}.image-upload-container .image-upload-buttons{display:none;position:absolute;right:5px;bottom:5px}.image-upload-container input[type="file"]{position:absolute;opacity:0}.image-upload-container .image-upload-loader{display:none;position:absolute;top:0;left:0;width:100%;height:100%;padding:20px;background:#f8f8f8}.mime{background-repeat:no-repeat;background-position:0 0;padding:1px 0 4px 26px}.mime-word{background-image:url("../img/mime/word.png")}.mime-excel{background-image:url("../img/mime/excel.png")}.mime-powerpoint{background-image:url("../img/mime/powerpoint.png")}.mime-pdf{background-image:url("../img/mime/pdf.png")}.mime-zip{background-image:url("../img/mime/zip.png")}.mime-image{background-image:url("../img/mime/image.png")}.mime-file{background-image:url("../img/mime/file.png")}.mime-photoshop{background-image:url("../img/mime/photoshop.png")}.mime-illustrator{background-image:url("../img/mime/illustrator.png")}.mime-video{background-image:url("../img/mime/video.png")}.mime-audio{background-image:url("../img/mime/audio.png")}ul.tour-list{list-style:none;margin-bottom:0;padding-left:10px}ul.tour-list li{padding-top:5px}ul.tour-list li a{color:#6fdbe8}ul.tour-list li a .fa{width:16px}ul.tour-list li.completed a{text-decoration:line-through;color:#bebebe}.atwho-view{position:absolute;top:0;left:0;display:none;margin-top:18px;background:white;color:#555555;font-size:14px;font-weight:400;border:1px solid #d7d7d7;border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);min-width:120px;max-width:265px;z-index:11110 !important;padding:5px 0}.atwho-view strong,.atwho-view b{font-weight:normal}.atwho-view ul li.hint{background:#fff !important;border-left:3px solid transparent !important;font-size:12px;color:#999}.atwho-view .cur small{color:red}.atwho-view strong{background-color:#f9f0d2}.atwho-view .cur strong{background-color:#f9f0d2}.atwho-view ul{list-style:none;padding:0;margin:auto}.atwho-view ul li{display:block;padding:5px 10px;border-left:3px solid transparent;padding:4px 15px 4px 8px;cursor:pointer}.atwho-view small{font-size:smaller;color:#777;font-weight:normal}.atwho-input.form-control{min-height:36px;height:auto;padding-right:95px;word-wrap:break-word}.atwho-input p{padding:0;margin:0}.atwho-placeholder{color:#bebebe !important}.atwho-emoji-entry{float:left;padding:4px !important;margin:0px !important;border:none !important}.atwho-emoji-entry:hover,.atwho-emoji-entry:active,.atwho-emoji-entry:focus{padding:4px !important;margin:0px !important;border:none !important;background-color:#f7f7f7 !important;border-radius:3px}.atwho-view .cur{border-left:3px solid #6fdbe8;background-color:#f7f7f7 !important}.atwho-user,.atwho-space,.atwho-input a{color:#6fdbe8}.atwho-input a:hover{color:#6fdbe8}.atwho-view strong{background-color:#f9f0d2}.atwho-view .cur strong{background-color:#f9f0d2}.atwho-view span{padding:5px}.sk-spinner-three-bounce.sk-spinner{margin:0 auto;width:70px;text-align:center}.loader{padding:30px 0}.loader .sk-spinner-three-bounce div,.loader .sk-spinner-three-bounce span{width:12px;height:12px;background-color:#6fdbe8;border-radius:100%;display:inline-block;-webkit-animation:sk-threeBounceDelay 1.4s infinite ease-in-out;animation:sk-threeBounceDelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.loader .sk-spinner-three-bounce .sk-bounce1{-webkit-animation-delay:-0.32s;animation-delay:-0.32s}.loader .sk-spinner-three-bounce .sk-bounce2{-webkit-animation-delay:-0.16s;animation-delay:-0.16s}@-webkit-keyframes sk-threeBounceDelay{0%,80%,100%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes sk-threeBounceDelay{0%,80%,100%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.loader-modal{padding:8px 0}.loader-postform{padding:9px 0}.loader-postform .sk-spinner-three-bounce.sk-spinner{text-align:left;margin:0}.markdown-render h1,.markdown-render h2,.markdown-render h3,.markdown-render h4,.markdown-render h5,.markdown-render h6{font-weight:bold !important}.markdown-render h1{font-size:28px !important}.markdown-render h2{font-size:24px !important}.markdown-render h3{font-size:18px !important}.markdown-render h4{font-size:16px !important}.markdown-render h5{font-size:14px !important}.markdown-render h6{color:#999;font-size:14px !important}.markdown-render pre{padding:0;border:none;border-radius:3px}.markdown-render pre code{padding:10px;border-radius:3px;font-size:12px !important}.markdown-render a,.markdown-render a:visited{background-color:inherit;text-decoration:none;color:#6fdbe8 !important}.markdown-render a.header-anchor{color:#777 !important}.markdown-render img{max-width:100%}.markdown-render table{width:100%}.markdown-render table th{font-size:13px;font-weight:700;color:#555}.markdown-render table thead tr{border-bottom:1px solid #d7d7d7}.markdown-render table tbody tr td,.markdown-render table thead tr th{border:1px solid #d7d7d7 !important;padding:4px}.md-editor.active{border:2px solid #6fdbe8 !important}.md-editor textarea{padding:10px !important}[data-ui-markdown],[data-ui-richtext]{overflow:hidden;overflow-wrap:break-word}[data-ui-markdown] h1,[data-ui-richtext] h1,[data-ui-markdown] h2,[data-ui-richtext] h2,[data-ui-markdown] h3,[data-ui-richtext] h3,[data-ui-markdown] h4,[data-ui-richtext] h4,[data-ui-markdown] h5,[data-ui-richtext] h5,[data-ui-markdown] h6,[data-ui-richtext] h6{text-align:start;margin:0 0 0.5em}[data-ui-markdown] h1,[data-ui-richtext] h1{font-size:1.7em !important;font-weight:600}[data-ui-markdown] h2,[data-ui-richtext] h2{font-size:1.5em !important;font-weight:500}[data-ui-markdown] h3,[data-ui-richtext] h3{font-size:1.2em !important}[data-ui-markdown] h4,[data-ui-richtext] h4{font-size:1.1em !important}[data-ui-markdown] h5,[data-ui-richtext] h5{font-size:1em !important}[data-ui-markdown] h6,[data-ui-richtext] h6{font-size:.85em !important}[data-ui-markdown] p,[data-ui-richtext] p,[data-ui-markdown] pre,[data-ui-richtext] pre,[data-ui-markdown] blockquote,[data-ui-richtext] blockquote{margin:0 0 1.1em}[data-ui-markdown] p:last-child,[data-ui-richtext] p:last-child{margin:0}[data-ui-markdown] pre code.hljs,[data-ui-richtext] pre code.hljs{background-color:#f5f5f5}[data-ui-markdown] blockquote,[data-ui-richtext] blockquote{border-left-width:10px;background-color:rgba(128,128,128,0.05);border-top-right-radius:5px;border-bottom-right-radius:5px;padding:15px 20px;font-size:1em;border-left:5px solid #888888}[data-ui-markdown] table,[data-ui-richtext] table{width:100%}[data-ui-markdown] table th,[data-ui-richtext] table th{font-size:13px;font-weight:700;color:#555;background-color:#f7f7f7}[data-ui-markdown] table td,[data-ui-richtext] table td,[data-ui-markdown] table th,[data-ui-richtext] table th{border:1px solid #d7d7d7 !important;padding:6px}[data-ui-markdown] dt,[data-ui-richtext] dt,[data-ui-markdown] dd,[data-ui-richtext] dd{margin-top:5px;margin-bottom:5px;line-height:1.45}[data-ui-markdown] dt,[data-ui-richtext] dt{font-weight:bold}[data-ui-markdown] dd,[data-ui-richtext] dd{margin-left:40px}[data-ui-markdown] pre,[data-ui-richtext] pre{text-align:start;border:0;padding:10px 20px;border-radius:5px}[data-ui-markdown] pre code,[data-ui-richtext] pre code{white-space:pre !important}[data-ui-markdown] blockquote ul:last-child,[data-ui-richtext] blockquote ul:last-child,[data-ui-markdown] blockquote ol:last-child,[data-ui-richtext] blockquote ol:last-child{margin-bottom:0px}[data-ui-markdown] ul,[data-ui-richtext] ul,[data-ui-markdown] ol,[data-ui-richtext] ol{margin-top:0;margin-bottom:10.5px}[data-ui-markdown] ul li p,[data-ui-richtext] ul li p,[data-ui-markdown] ol li p,[data-ui-richtext] ol li p{overflow:visible !important}[data-ui-markdown] .footnote,[data-ui-richtext] .footnote{vertical-align:top;position:relative;top:-0.5em;font-size:.8em}[data-ui-markdown] .emoji,[data-ui-richtext] .emoji{width:16px}[data-ui-markdown] a.not-found,[data-ui-richtext] a.not-found{color:#fdd198}[data-ui-markdown] li,[data-ui-richtext] li{border:0 !important;background-color:transparent !important;padding:0}[data-ui-markdown] img,[data-ui-richtext] img{max-width:100%}blockquote{border-left:2px dotted #888;padding-left:5px;background:#d0f0ff}.wmd-panel{min-width:500px}.wmd-button-bar{width:100%;background-color:Silver}.wmd-input{height:300px;width:100%;background-color:Gainsboro;border:1px solid DarkGray}.wmd-button-row{position:relative;margin-left:5px;margin-right:5px;margin-bottom:5px;margin-top:10px;padding:0px;height:20px}.wmd-spacer{width:1px;height:20px;margin-left:14px;position:absolute;background-color:Silver;display:inline-block;list-style:none}.wmd-button{width:20px;height:20px;padding-left:2px;padding-right:3px;position:absolute;display:inline-block;list-style:none;cursor:pointer}.wmd-button>span{background-image:url(../img/wmd-buttons.png);background-repeat:no-repeat;background-position:0px 0px;width:20px;height:20px;display:inline-block}.wmd-spacer1{left:50px}.wmd-spacer2{left:175px}.wmd-spacer3{left:300px}.wmd-prompt-background{background-color:Black}.wmd-prompt-dialog{border:1px solid #999999;background-color:#F5F5F5}.wmd-prompt-dialog>div{font-size:0.8em;font-family:arial,helvetica,sans-serif}.wmd-prompt-dialog>form>input[type="text"]{border:1px solid #999999;color:black}.wmd-prompt-dialog>form>input[type="button"]{border:1px solid #888888;font-family:trebuchet MS,helvetica,sans-serif;font-size:0.8em;font-weight:bold}@media (max-width:991px){.layout-sidebar-container{display:none}}.ui-widget-header{border:none !important;background:#fff !important;color:#7a7a7a !important;font-weight:300 !important}.ui-widget-content{border:1px solid #dddcda !important;border-radius:0 !important;background:#fff;color:#555 !important;-webkit-box-shadow:0 6px 6px rgba(0,0,0,0.1);box-shadow:0 6px 6px rgba(0,0,0,0.1)}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{opacity:0.2}.ui-datepicker .ui-datepicker-prev:hover,.ui-datepicker .ui-datepicker-next:hover{background:#fff !important;border:none;margin:1px}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:none !important;background:#f7f7f7 !important;color:#7a7a7a !important}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:none !important;border:1px solid #b2b2b2 !important}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #6fdbe8 !important;background:#ddf6fa !important}.status-bar-body{color:white;position:fixed;width:100%;background-color:rgba(0,0,0,0.7);text-align:center;padding:20px;z-index:9999999;bottom:0px;display:block;line-height:20px}.status-bar-close{color:white;fonfont-weight:bold;font-size:21px;cursor:pointer}.status-bar-close:hover{color:white}.status-bar-close i{vertical-align:top !important;padding-top:3px}.status-bar-content i{margin-right:10px;font-size:21px;vertical-align:middle}.status-bar-content .showMore{color:#6fdbe8;float:right;margin-left:10px;font-size:0.7em;cursor:pointer;vertical-align:middle;white-space:nowrap}.status-bar-content .status-bar-details{text-align:left;font-size:0.7em;margin-top:20px;max-height:200px;overflow:auto}.status-bar-content span{vertical-align:middle}.status-bar-content i.error,.status-bar-content i.fatal{color:#ff8989}.status-bar-content i.warning{color:#fdd198}.status-bar-content i.info,.status-bar-content i.debug{color:#6fdbe8}.status-bar-content i.success{color:#85CA2B}.highlight{background-color:#fff8e0}.alert-default{color:#555;background-color:#f7f7f7;border-color:#ededed;font-size:13px}.alert-default .info{margin:10px 0}.alert-success{color:#84be5e;background-color:#f7fbf4;border-color:#97d271}.alert-warning{color:#e9b168;background-color:#fffbf7;border-color:#fdd198}.alert-danger{color:#ff8989;background-color:#fff6f6;border-color:#ff8989}.data-saved{padding-left:10px;color:#6fdbe8}img.bounceIn{-webkit-animation-duration:800ms;-moz-animation-duration:800ms;animation-duration:800ms}.tags .tag{margin-top:5px;border-radius:2px;padding:4px 8px;text-transform:uppercase;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ProsemirrorEditor.fullscreen{position:fixed;top:0;left:0;width:100%;height:100%;z-index:9998}.ProsemirrorEditor.fullscreen .ProseMirror-menubar-wrapper{height:100%}.ProsemirrorEditor.fullscreen .humhub-ui-richtext{max-height:none !important}.ProsemirrorEditor.fullscreen .ProseMirror{position:static;overflow:auto;heigh:100%;height:calc(100% - 26px);height:-o-calc(100% - 26px);height:-webkit-calc(100% - 26px)}.ProsemirrorEditor.fullscreen .ProseMirror-menubar{position:static !important;top:0 !important;left:0 !important;margin:0 !important;width:100% !important}.ProsemirrorEditor .ProseMirror{padding-right:12px}.ProsemirrorEditor .ProseMirror-menu{margin:0 -4px;line-height:1}.ProsemirrorEditor .ProseMirror-tooltip .ProseMirror-menu{width:-webkit-fit-content;width:fit-content;white-space:pre}.ProsemirrorEditor .ProseMirror-menuitem{margin-right:0;display:inline-block}.ProsemirrorEditor .ProseMirror-menuseparator{border-right:1px solid #ddd;margin-right:3px}.ProsemirrorEditor .ProseMirror-menuitem .ProseMirror-menu-group{border-right:1px solid #ddd}.ProsemirrorEditor .ProseMirror-menuitem .ProseMirror-menu-group.last{border-right:none}.ProsemirrorEditor .ProseMirror-menuitem .seperator{border-right:1px solid #ddd;margin-right:2px;padding-right:2px}.ProsemirrorEditor .ProseMirror-menu-dropdown,.ProsemirrorEditor .ProseMirror-menu-dropdown-menu{font-size:90%;white-space:nowrap}.ProsemirrorEditor .ProseMirror-menu-dropdown{cursor:pointer;position:relative;padding-right:15px !important}.ProsemirrorEditor .ProseMirror-menu-dropdown-wrap{padding:1px 0 1px 0;display:inline-block;position:relative}.ProsemirrorEditor .ProseMirror-menu-dropdown-right{right:0}.ProsemirrorEditor .ProseMirror-menu-dropdown:after{content:"";border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid currentColor;opacity:.6;position:absolute;right:4px;top:calc(50% - 2px)}.ProsemirrorEditor .ProseMirror-menu-submenu{border-top-right-radius:4px}.ProsemirrorEditor .ProseMirror-menu-dropdown-menu,.ProsemirrorEditor .ProseMirror-menu-submenu{position:absolute;background:white;color:#666;border:1px solid #aaa;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.ProsemirrorEditor .ProseMirror-menu-dropdown-menu{z-index:15;min-width:6em;margin-top:2px}.ProsemirrorEditor .ProseMirror-menu-dropdown-item{cursor:pointer}.ProsemirrorEditor .ProseMirror-menu-dropdown-item div[title],.ProsemirrorEditor .ProseMirror-menu-submenu-wrap{padding:4px}.ProsemirrorEditor .ProseMirror-menu-dropdown-item:hover{background:#f2f2f2}.ProsemirrorEditor .ProseMirror-menu-submenu-wrap{position:relative}.ProsemirrorEditor .ProseMirror-menu-submenu-label:after{content:"";border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid currentColor;opacity:.6;position:absolute;right:4px;top:calc(50% - 4px)}.ProsemirrorEditor .ProseMirror-menu-submenu{display:none;min-width:4em;left:100%;top:0}.ProsemirrorEditor .ProseMirror-menu-active{background:#eee;border-radius:4px;border:1px solid #ededed !important}.ProsemirrorEditor .ProseMirror-menu-disabled{opacity:.3}.ProsemirrorEditor .ProseMirror-menu-submenu-wrap:hover .ProseMirror-menu-submenu,.ProsemirrorEditor .ProseMirror-menu-submenu-wrap-active .ProseMirror-menu-submenu{display:block}.ProsemirrorEditor .ProseMirror-icon{display:inline-block;line-height:.8;vertical-align:-2px;padding:1px 7px;cursor:pointer;border:1px solid transparent}.ProsemirrorEditor .ProseMirror-menu-disabled.ProseMirror-icon{cursor:default}.ProsemirrorEditor .ProseMirror-icon svg{fill:currentColor;height:1em}.ProsemirrorEditor .ProseMirror-icon span{vertical-align:text-top}.ProsemirrorEditor.plainMenu .ProseMirror{border-top-left-radius:0 !important;border-top-right-radius:0 !important;border-top-width:1px !important}.ProsemirrorEditor.plainMenu .ProseMirror-menu-group{padding:5px}.ProsemirrorEditor.plainMenu .ProseMirror-menuitem .ProseMirror-menu-group{padding:2px}.ProsemirrorEditor.plainMenu .ProseMirror-menubar~.ProseMirror-focused{border-color:#6fdbe8 !important}.ProsemirrorEditor.plainMenu .ProseMirror-textblock-dropdown{min-width:3em}.ProsemirrorEditor.plainMenu .ProseMirror-menubar-wrapper{z-index:8}.ProsemirrorEditor.plainMenu .ProseMirror-menubar{background-color:#f7f7f7;border-top-left-radius:4px;border-top-right-radius:4px;border:1px solid #ddd;position:relative;min-height:1em;color:#666;padding:1px 6px 1px 0;top:0;left:0;right:0;z-index:10;-moz-box-sizing:border-box;box-sizing:border-box;overflow:visible}.ProsemirrorEditor.focusMenu .form-control:focus{border-top-left-radius:0 !important}.ProsemirrorEditor.focusMenu .ProseMirror-menubar{display:table;min-height:1em;color:#666;padding:2px 6px;top:0;left:0;right:0;z-index:10;-moz-box-sizing:border-box;box-sizing:border-box;overflow:visible;margin-top:-26px;background:white;border:1px solid #d7d7d7;border-bottom:0;border-top:2px solid #d7d7d7;border-top-left-radius:4px;border-top-right-radius:4px;float:left}@-moz-document url-prefix(){.ProsemirrorEditor.focusMenu .ProseMirror-menubar{margin-top:-27px}}.ProsemirrorEditor .ProseMirror{position:relative;word-wrap:break-word;white-space:pre-wrap;-webkit-font-variant-ligatures:none;font-variant-ligatures:none}.ProsemirrorEditor .ProseMirror ul,.ProsemirrorEditor .ProseMirror ol{cursor:default}.ProsemirrorEditor .ProseMirror pre{white-space:pre-wrap}.ProsemirrorEditor .ProseMirror li{position:relative}.ProsemirrorEditor .ProseMirror img{max-width:100%}.ProsemirrorEditor .ProseMirror-hideselection *::selection{background:transparent}.ProsemirrorEditor .ProseMirror-hideselection *::-moz-selection{background:transparent}.ProsemirrorEditor .ProseMirror-selectednode{outline:2px dashed #8cf}.ProsemirrorEditor li.ProseMirror-selectednode{outline:none}.ProsemirrorEditor li.ProseMirror-selectednode:after{content:"";position:absolute;left:-32px;right:-2px;top:-2px;bottom:-2px;border:2px solid #8cf;pointer-events:none}.ProsemirrorEditor .ProseMirror-textblock-dropdown{min-width:3em}.ProsemirrorEditor .ProseMirror-menu{margin:0 -4px;line-height:1}.ProsemirrorEditor .ProseMirror-tooltip .ProseMirror-menu{width:-webkit-fit-content;width:fit-content;white-space:pre}.ProsemirrorEditor .ProseMirror-gapcursor{display:none;pointer-events:none;position:absolute}.ProsemirrorEditor .ProseMirror-gapcursor:after{content:"";display:block;position:absolute;top:-2px;width:20px;border-top:1px solid black;animation:ProseMirror-cursor-blink 1.1s steps(2, start) infinite}@keyframes ProseMirror-cursor-blink{to{visibility:hidden}}.ProsemirrorEditor .ProseMirror-focused .ProseMirror-gapcursor{display:block}.ProsemirrorEditor .ProseMirror-example-setup-style hr{padding:2px 10px;border:none;margin:1em 0}.ProsemirrorEditor .ProseMirror-example-setup-style hr:after{content:"";display:block;height:1px;background-color:silver;line-height:2px}.ProsemirrorEditor .ProseMirror ul,.ProsemirrorEditor .ProseMirror ol{padding-left:30px}.ProsemirrorEditor .ProseMirror blockquote{padding-left:1em;border-left:3px solid #eee;margin-left:0;margin-right:0}.ProsemirrorEditor .ProseMirror-example-setup-style img{cursor:default}.ProsemirrorEditor .ProseMirror p{margin-top:1em}.ProsemirrorEditor .ProseMirror p:first-child{margin:0px}.ProsemirrorEditor .ProseMirror p:first-child+*{margin-top:1em}.ProsemirrorEditor .ProsemirrorEditor{position:relative}.ProsemirrorEditor .ProsemirrorEditor .ProseMirror{padding-right:12px !important}.ProsemirrorEditor .ProsemirrorEditor img{max-width:100%}.ProsemirrorEditor .ProseMirror h1:first-child,.ProsemirrorEditor .ProseMirror h2:first-child,.ProsemirrorEditor .ProseMirror h3:first-child,.ProsemirrorEditor .ProseMirror h4:first-child,.ProsemirrorEditor .ProseMirror h5:first-child,.ProsemirrorEditor .ProseMirror h6:first-child{margin-top:10px}.ProsemirrorEditor .ProseMirror [data-mention]{color:#6fdbe8}.ProsemirrorEditor .ProseMirror{outline:none}.ProsemirrorEditor .ProseMirror [data-oembed]{font-size:0}.ProsemirrorEditor .ProseMirror iframe{pointer-events:none;display:block}.ProsemirrorEditor .ProseMirror p{margin-bottom:1em}.ProsemirrorEditor .ProseMirror-textblock-dropdown{min-width:3em}.ProsemirrorEditor .ProseMirror .placeholder{padding:0px !important;pointer-events:none;height:0}.ProsemirrorEditor .ProseMirror:focus .placeholder{display:none}.ProsemirrorEditor .ProseMirror .tableWrapper{overflow-x:auto}.ProsemirrorEditor .ProseMirror .column-resize-handle{position:absolute;right:-2px;top:0;bottom:0;width:4px;z-index:20;background-color:#adf;pointer-events:none}.ProsemirrorEditor .ProseMirror.resize-cursor{cursor:ew-resize;cursor:col-resize}.ProsemirrorEditor .ProseMirror .selectedCell:after{z-index:2;position:absolute;content:"";left:0;right:0;top:0;bottom:0;background:rgba(200,200,255,0.4);pointer-events:none}.ProsemirrorEditor .ProseMirror-menubar-wrapper{position:relative;outline:none}.ProsemirrorEditor .ProseMirror table{margin:0}.ProsemirrorEditor .ProseMirror .tableWrapper{margin:1em 0}.ProseMirror-prompt{background:white;padding:5px 10px 5px 15px;border:1px solid silver;position:fixed;border-radius:3px;min-width:300px;z-index:999999;box-shadow:-0.5px 2px 5px rgba(0,0,0,0.2)}.ProseMirror-prompt h5{font-weight:bold;font-size:100%;margin:15px 0}.ProseMirror-prompt input{margin-bottom:5px}.ProseMirror-prompt-close{position:absolute;left:2px;top:1px;color:#666;border:none;background:transparent;padding:0}.ProseMirror-prompt-close:after{content:"✕";font-size:12px}.ProseMirror-invalid{background:#ffc;border:1px solid #cc7;border-radius:4px;padding:5px 10px;position:absolute;min-width:10em}.ProseMirror-prompt-buttons{margin:15px 0;text-align:center}.atwho-view .cur{border-left:3px solid #59d6e4;background-color:#f7f7f7 !important}.atwho-user,.atwho-space,.atwho-input a{color:#59d6e4}.atwho-input a:hover{color:#59d6e4}.atwho-view strong{background-color:#f9f0d2}.atwho-view .cur strong{background-color:#f9f0d2}[data-emoji-category]{max-height:200px;display:block;position:relative;overflow:auto}[data-emoji-category] .atwho-emoji-entry{width:24px;height:28px;overflow:hidden}[data-emoji-category] .atwho-emoji-entry.cur{background-color:#ededed !important}.emoji-nav{padding-top:10px}.emoji-nav .emoji-nav-item{border-top:2px solid #fff8e0}.emoji-nav .emoji-nav-item.cur{border-left:0px;border-top:2px solid #6fdbe8}@media screen and (max-width:768px){.ProsemirrorEditor.focusMenu .ProseMirror-menubar{min-height:1em}}.icon-sm,.fa-sm{font-size:.875em}.icon-lg,.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-0.0667em}.icon-2x,.fa-2x{font-size:2em}.icon-3x,.fa-3x{font-size:3em}.icon-4x,.fa-4x{font-size:4em}.icon-5x,.fa-5x{font-size:5em}.icon-6x,.fa-6x{font-size:6em}.icon-7x,.fa-7x{font-size:7em}.icon-9x,.fa-9x{font-size:9em}.icon-10x,.fa-10x{font-size:10em}/*! Select2 humhub Theme v0.1.0-beta.4 | MIT License | github.com/select2/select2-humhub-theme */.select2-container--humhub{display:block}.select2-container--humhub .select2-selection{background-color:#fff;border:2px solid #ededed;border-radius:4px;color:#555;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;outline:0}.select2-container--humhub .select2-search--dropdown .select2-search__field{background-color:#fff;border:2px solid #ededed;border-radius:4px;color:#555;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px}.select2-container--humhub .select2-search__field{outline:0}.select2-container--humhub .select2-search__field::-webkit-input-placeholder{color:#999}.select2-container--humhub .select2-search__field:-moz-placeholder{color:#999}.select2-container--humhub .select2-search__field::-moz-placeholder{color:#999;opacity:1}.select2-container--humhub .select2-search__field:-ms-input-placeholder{color:#999}.select2-container--humhub .select2-results__option[role=group]{padding:0}.select2-container--humhub .select2-results__option[aria-disabled=true]{color:#777;cursor:not-allowed}.select2-container--humhub .select2-results__option[aria-selected=true]{background-color:#f5f5f5;color:#262626;border-left:3px solid transparent}.select2-container--humhub .select2-results__option[aria-selected=false]{border-left:3px solid transparent}.select2-container--humhub .select2-results__option--highlighted[aria-selected]{background-color:#f7f7f7;border-left:3px solid #6fdbe8;color:#555}.select2-container--humhub .select2-results__option .select2-results__option{padding:6px 12px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option{margin-left:-12px;padding-left:24px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-24px;padding-left:36px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-36px;padding-left:48px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-48px;padding-left:60px}.select2-container--humhub .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-60px;padding-left:72px}.select2-container--humhub .select2-results__group{color:#777;display:block;padding:6px 12px;font-size:12px;line-height:1.42857143;white-space:nowrap}.select2-container--humhub.select2-container--focus .select2-selection,.select2-container--humhub.select2-container--open .select2-selection{border:2px solid #6fdbe8;outline:0;box-shadow:none}.select2-container--humhub.select2-container--open .select2-selection .select2-selection__arrow b{border-color:transparent transparent #999 transparent;border-width:0 4px 4px 4px}.select2-container--humhub .select2-selection__clear{color:#999;cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--humhub .select2-selection__clear:hover{color:#333}.select2-container--humhub.select2-container--disabled .select2-selection{border-color:#ccc;-webkit-box-shadow:none;box-shadow:none}.select2-container--humhub.select2-container--disabled .select2-selection,.select2-container--humhub.select2-container--disabled .select2-search__field{cursor:not-allowed}.select2-container--humhub.select2-container--disabled .select2-selection,.select2-container--humhub.select2-container--disabled .select2-selection--multiple .select2-selection__choice{background-color:#eee}.select2-container--humhub.select2-container--disabled .select2-selection__clear,.select2-container--humhub.select2-container--disabled .select2-selection--multiple .select2-selection__choice__remove{display:none}.select2-container--humhub .select2-dropdown{-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);border-color:#d7d7d7;overflow-x:hidden;margin-top:-1px}.select2-container--humhub .select2-dropdown--above{margin-top:1px}.select2-container--humhub .select2-results>.select2-results__options{max-height:400px;overflow-y:auto}.select2-container--humhub .select2-selection--single{height:34px;line-height:1.42857143;padding:6px 24px 6px 12px}.select2-container--humhub .select2-selection--single .select2-selection__arrow{position:absolute;bottom:0;right:12px;top:0;width:4px}.select2-container--humhub .select2-selection--single .select2-selection__arrow b{border-color:#999 transparent transparent transparent;border-style:solid;border-width:4px 4px 0 4px;height:0;left:0;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--humhub .select2-selection--single .select2-selection__rendered{color:#555;padding:0}.select2-container--humhub .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--humhub .select2-selection--multiple{min-height:34px;padding:2px}.select2-container--humhub .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;display:block;line-height:1.42857143;list-style:none;margin:0;overflow:hidden;padding:0;width:100%;text-overflow:ellipsis;white-space:nowrap}.select2-container--humhub .select2-selection--multiple .select2-selection__placeholder{color:#999;float:left;margin-top:5px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice{color:#555;border-radius:4px;cursor:default;padding:0 6px;background-color:#6fdbe8;color:#fff;border-radius:3px;font-size:12px !important;padding:0 5px 2px 2px;float:left;margin:2px;height:28px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice img,.select2-container--humhub .select2-selection--multiple .select2-selection__choice div{margin-right:5px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice span.no-image{line-height:27px;padding-left:5px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice i{margin:0px 2px;line-height:27px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice .picker-close{cursor:pointer}.select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field{background:transparent;padding:0 5px;width:auto !important;height:32px;line-height:1.42857143;margin-top:0;min-width:5em}.select2-container--humhub .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:none;font-weight:bold;margin-right:3px}.select2-container--humhub .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--humhub .select2-selection--multiple .select2-selection__clear{margin-top:6px}.select2-container--humhub.input-sm,.select2-container--humhub.input-lg{border-radius:0;font-size:12px;height:auto;line-height:1;padding:0}.select2-container--humhub.input-sm .select2-selection--single,.input-group-sm .select2-container--humhub .select2-selection--single,.form-group-sm .select2-container--humhub .select2-selection--single{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 22px 5px 10px}.select2-container--humhub.input-sm .select2-selection--single .select2-selection__arrow b,.input-group-sm .select2-container--humhub .select2-selection--single .select2-selection__arrow b,.form-group-sm .select2-container--humhub .select2-selection--single .select2-selection__arrow b{margin-left:-5px}.select2-container--humhub.input-sm .select2-selection--multiple,.input-group-sm .select2-container--humhub .select2-selection--multiple,.form-group-sm .select2-container--humhub .select2-selection--multiple{min-height:30px}.select2-container--humhub.input-sm .select2-selection--multiple .select2-selection__choice,.input-group-sm .select2-container--humhub .select2-selection--multiple .select2-selection__choice,.form-group-sm .select2-container--humhub .select2-selection--multiple .select2-selection__choice{font-size:12px;line-height:1.5;margin:4px 0 0 5px;padding:0 5px}.select2-container--humhub.input-sm .select2-selection--multiple .select2-search--inline .select2-search__field,.input-group-sm .select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field,.form-group-sm .select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field{padding:0 10px;font-size:12px;height:28px;line-height:1.5}.select2-container--humhub.input-sm .select2-selection--multiple .select2-selection__clear,.input-group-sm .select2-container--humhub .select2-selection--multiple .select2-selection__clear,.form-group-sm .select2-container--humhub .select2-selection--multiple .select2-selection__clear{margin-top:5px}.select2-container--humhub.input-lg .select2-selection--single,.input-group-lg .select2-container--humhub .select2-selection--single,.form-group-lg .select2-container--humhub .select2-selection--single{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 31px 10px 16px}.select2-container--humhub.input-lg .select2-selection--single .select2-selection__arrow,.input-group-lg .select2-container--humhub .select2-selection--single .select2-selection__arrow,.form-group-lg .select2-container--humhub .select2-selection--single .select2-selection__arrow{width:5px}.select2-container--humhub.input-lg .select2-selection--single .select2-selection__arrow b,.input-group-lg .select2-container--humhub .select2-selection--single .select2-selection__arrow b,.form-group-lg .select2-container--humhub .select2-selection--single .select2-selection__arrow b{border-width:5px 5px 0 5px;margin-left:-5px;margin-left:-10px;margin-top:-2.5px}.select2-container--humhub.input-lg .select2-selection--multiple,.input-group-lg .select2-container--humhub .select2-selection--multiple,.form-group-lg .select2-container--humhub .select2-selection--multiple{min-height:46px}.select2-container--humhub.input-lg .select2-selection--multiple .select2-selection__choice,.input-group-lg .select2-container--humhub .select2-selection--multiple .select2-selection__choice,.form-group-lg .select2-container--humhub .select2-selection--multiple .select2-selection__choice{font-size:18px;line-height:1.3333333;border-radius:4px;margin:9px 0 0 8px;padding:0 10px}.select2-container--humhub.input-lg .select2-selection--multiple .select2-search--inline .select2-search__field,.input-group-lg .select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field,.form-group-lg .select2-container--humhub .select2-selection--multiple .select2-search--inline .select2-search__field{padding:0 16px;font-size:18px;height:44px;line-height:1.3333333}.select2-container--humhub.input-lg .select2-selection--multiple .select2-selection__clear,.input-group-lg .select2-container--humhub .select2-selection--multiple .select2-selection__clear,.form-group-lg .select2-container--humhub .select2-selection--multiple .select2-selection__clear{margin-top:10px}.select2-container--humhub.input-lg.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #999 transparent;border-width:0 5px 5px 5px}.input-group-lg .select2-container--humhub.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #999 transparent;border-width:0 5px 5px 5px}.select2-container--humhub[dir="rtl"] .select2-selection--single{padding-left:24px;padding-right:12px}.select2-container--humhub[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:0;padding-left:0;text-align:right}.select2-container--humhub[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--humhub[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:12px;right:auto}.select2-container--humhub[dir="rtl"] .select2-selection--single .select2-selection__arrow b{margin-left:0}.select2-container--humhub[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--humhub[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder{float:right}.select2-container--humhub[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:0;margin-right:6px}.select2-container--humhub[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.has-warning .select2-dropdown,.has-warning .select2-selection{border-color:#fdd198}.has-warning .select2-container--focus .select2-selection,.has-warning .select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fffefc;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fffefc;border-color:#fcbb66}.has-warning.select2-drop-active{border-color:#fcbb66}.has-warning.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#fcbb66}.has-error .select2-dropdown,.has-error .select2-selection{border-color:#ff8989}.has-error .select2-container--focus .select2-selection,.has-error .select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffefef;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffefef;border-color:#ff5656}.has-error.select2-drop-active{border-color:#ff5656}.has-error.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#ff5656}.has-success .select2-dropdown,.has-success .select2-selection{border-color:#97d271}.has-success .select2-container--focus .select2-selection,.has-success .select2-container--open .select2-selection{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d0ebbe;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d0ebbe;border-color:#7bc64a}.has-success.select2-drop-active{border-color:#7bc64a}.has-success.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#7bc64a}.input-group .select2-container--humhub{display:table;table-layout:fixed;position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group.select2-humhub-prepend .select2-container--humhub .select2-selection{border-bottom-left-radius:0;border-top-left-radius:0}.input-group.select2-humhub-append .select2-container--humhub .select2-selection{border-bottom-right-radius:0;border-top-right-radius:0}.select2-humhub-append .select2-container--humhub,.select2-humhub-prepend .select2-container--humhub,.select2-humhub-append .input-group-btn,.select2-humhub-prepend .input-group-btn,.select2-humhub-append .input-group-btn .btn,.select2-humhub-prepend .input-group-btn .btn{vertical-align:top}.form-control.select2-hidden-accessible{position:absolute !important;width:1px !important}.form-inline .select2-container--humhub{display:inline-block}ul.tag_input{list-style:none;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;padding:0 0 9px 4px}ul.tag_input li img{margin:0 5px 0 0}.tag_input_field{outline:none;border:none !important;padding:5px 4px 0 !important;width:170px;margin:2px 0 0 !important}.userInput,.spaceInput{background-color:#6fdbe8;font-weight:600;color:#fff;border-radius:3px;font-size:12px !important;padding:2px;float:left;margin:3px 4px 0 0}.userInput i,.spaceInput i{padding:0 6px;font-size:14px;cursor:pointer;line-height:8px} \ No newline at end of file From 4d0036f9917307e7bc0f73f243cc882705567fcc Mon Sep 17 00:00:00 2001 From: buddh4 Date: Thu, 31 Jan 2019 22:08:38 +0100 Subject: [PATCH 15/17] Enh: Added obj support for `humhub\libs\Sort` Chng: Implemented `Menu::renderEntry` as template function pattern Fix: Menu sorting not active Fix: Menu isVisible not active by default --- protected/humhub/docs/CHANGELOG_DEV.md | 5 ++- protected/humhub/libs/Sort.php | 18 ++++++++- .../admin/controllers/IndexController.php | 14 ++++++- .../modules/admin/widgets/AdminMenu.php | 25 ++++--------- .../modules/ui/menu/DropdownDivider.php | 2 +- .../humhub/modules/ui/menu/MenuEntry.php | 18 ++++++++- protected/humhub/modules/ui/menu/MenuLink.php | 3 +- .../humhub/modules/ui/menu/widgets/Menu.php | 37 +++++++++++++++++-- 8 files changed, 91 insertions(+), 31 deletions(-) diff --git a/protected/humhub/docs/CHANGELOG_DEV.md b/protected/humhub/docs/CHANGELOG_DEV.md index e9d868bf8a..044208f528 100644 --- a/protected/humhub/docs/CHANGELOG_DEV.md +++ b/protected/humhub/docs/CHANGELOG_DEV.md @@ -16,4 +16,7 @@ HumHub Change Log (DEVELOP) - Chng #2164: Removed MSN & Google+ social bookmarks during setup - Enh: Added a user module configuration for setting password strength rules (Baleks) - Fix #3103 Password recovery links pjax layout issue - +- Chng: New Menu and MenuEntry rendering +- Enh: Added Icon abstraction `humhub\modules\ui\icon\widgets\Icon` +- Enh: Added `humhub\libs\Html::addPjaxPrevention()` for link options +- Enh: Added obj support for `humhub\libs\Sort` diff --git a/protected/humhub/libs/Sort.php b/protected/humhub/libs/Sort.php index 6daaa8b4b6..97c41481a7 100644 --- a/protected/humhub/libs/Sort.php +++ b/protected/humhub/libs/Sort.php @@ -13,8 +13,8 @@ class Sort public static function sort(&$arr, $field = 'sortOrder') { usort($arr, function($a, $b) use ($field) { - $sortA = (isset($a[$field])) ? $a[$field] : PHP_INT_MAX; - $sortB = (isset($b[$field])) ? $b[$field] : PHP_INT_MAX; + $sortA = static::getSortValue($a, $field); + $sortB = static::getSortValue($b, $field); if ($sortA == $sortB) { return 0; @@ -27,4 +27,18 @@ class Sort return $arr; } + + private static function getSortValue($obj, $field) + { + if(is_array($obj) && isset($obj[$field])) { + return $obj[$field]; + } + + if(property_exists($obj, $field)) { + return $obj->$field; + } + + return PHP_INT_MAX; + } + } diff --git a/protected/humhub/modules/admin/controllers/IndexController.php b/protected/humhub/modules/admin/controllers/IndexController.php index 9d241fef1e..3148316a6a 100644 --- a/protected/humhub/modules/admin/controllers/IndexController.php +++ b/protected/humhub/modules/admin/controllers/IndexController.php @@ -8,8 +8,11 @@ namespace humhub\modules\admin\controllers; +use humhub\modules\ui\menu\MenuLink; use Yii; use humhub\modules\admin\components\Controller; +use humhub\modules\admin\widgets\AdminMenu; +use yii\web\HttpException; /** * IndexController is the admin section start point. @@ -39,9 +42,16 @@ class IndexController extends Controller */ public function actionIndex() { - $adminMenu = new \humhub\modules\admin\widgets\AdminMenu(); + $adminMenu = new AdminMenu(); - return $this->redirect($adminMenu->items[0]['url']); + /* @var $firstVisible MenuLink */ + $firstVisible = $adminMenu->getFirstEntry(MenuLink::class, true); + + if(!$firstVisible) { + throw new HttpException(403); + } + + return $this->redirect($firstVisible->getUrl()); } } diff --git a/protected/humhub/modules/admin/widgets/AdminMenu.php b/protected/humhub/modules/admin/widgets/AdminMenu.php index 0094e6d24f..9627cd2867 100644 --- a/protected/humhub/modules/admin/widgets/AdminMenu.php +++ b/protected/humhub/modules/admin/widgets/AdminMenu.php @@ -96,21 +96,17 @@ class AdminMenu extends LeftNavigation /** * @inheritdoc */ - public function run() + public function addItem($entryArray) { - // Workaround for modules with no admin menu permission support. - if (!Yii::$app->user->isAdmin()) { - foreach ($this->items as $key => $item) { - if (!isset($item['isVisible'])) { - unset($this->items[$key]); - } - } + $entry = MenuLink::createByArray($entryArray); + + if(!isset($entryArray['isVisible'])) { + $entry->setIsVisible(Yii::$app->user->isAdmin()); } - return parent::run(); + $this->addEntry($entry); } - public static function canAccess() { $canSeeAdminSection = Yii::$app->session->get('user.canSeeAdminSection'); @@ -124,14 +120,7 @@ class AdminMenu extends LeftNavigation private static function checkNonAdminAccess() { - $adminMenu = new self(); - foreach ($adminMenu->items as $item) { - if (isset($item['isVisible']) && $item['isVisible']) { - return true; - } - } - - return false; + return Yii::$app->user->can([ManageGroups::class, ManageModules::class, ManageSettings::class, ManageUsers::class, SeeAdminInformation::class]); } } diff --git a/protected/humhub/modules/ui/menu/DropdownDivider.php b/protected/humhub/modules/ui/menu/DropdownDivider.php index 34719ccfc4..98ab51db79 100644 --- a/protected/humhub/modules/ui/menu/DropdownDivider.php +++ b/protected/humhub/modules/ui/menu/DropdownDivider.php @@ -30,7 +30,7 @@ class DropdownDivider extends MenuEntry /** * @inheritdoc */ - public function render($extraHtmlOptions = []) + public function renderEntry($extraHtmlOptions = []) { Html::addCssClass($extraHtmlOptions, 'divider'); return Html::tag('li', '', $this->getHtmlOptions($extraHtmlOptions)); diff --git a/protected/humhub/modules/ui/menu/MenuEntry.php b/protected/humhub/modules/ui/menu/MenuEntry.php index a9ddf41637..62e97f0730 100644 --- a/protected/humhub/modules/ui/menu/MenuEntry.php +++ b/protected/humhub/modules/ui/menu/MenuEntry.php @@ -49,7 +49,7 @@ abstract class MenuEntry extends BaseObject protected $isActive = false; /** - * Renders the entry html, this function should respect [[htmlOptions]] array by calling [[getHtmlOptions()]] and passing + * Renders the entry html, this template function should respect [[htmlOptions]] array by calling [[getHtmlOptions()]] and passing * the $extraHtmlOptions array as for example: * * ```php @@ -61,7 +61,21 @@ abstract class MenuEntry extends BaseObject * @param array $extraHtmlOptions * @return string the Html link */ - abstract public function render($extraHtmlOptions = []); + abstract protected function renderEntry($extraHtmlOptions = []); + + /** + * Public accessible render function responsible for rendering this entry. + * + * @param array $extraHtmlOptions + * @return string + */ + public function render($extraHtmlOptions = []) { + if(!$this->isVisible) { + return ''; + } + + return $this->renderEntry($extraHtmlOptions); + } /** * @return boolean is active diff --git a/protected/humhub/modules/ui/menu/MenuLink.php b/protected/humhub/modules/ui/menu/MenuLink.php index 6e9f45033f..e2520869b9 100644 --- a/protected/humhub/modules/ui/menu/MenuLink.php +++ b/protected/humhub/modules/ui/menu/MenuLink.php @@ -12,6 +12,7 @@ use humhub\modules\ui\icon\widgets\Icon; use humhub\modules\ui\menu\widgets\Menu; use humhub\libs\Html; use humhub\widgets\Link; +use Yii; use yii\helpers\Url; /** @@ -60,7 +61,7 @@ class MenuLink extends MenuEntry * @param array $extraHtmlOptions * @return string the Html link */ - public function render($extraHtmlOptions = []) + public function renderEntry($extraHtmlOptions = []) { if($this->link) { return $this->link.''; diff --git a/protected/humhub/modules/ui/menu/widgets/Menu.php b/protected/humhub/modules/ui/menu/widgets/Menu.php index 7d8e71e48a..1694335ebb 100644 --- a/protected/humhub/modules/ui/menu/widgets/Menu.php +++ b/protected/humhub/modules/ui/menu/widgets/Menu.php @@ -9,6 +9,7 @@ namespace humhub\modules\ui\menu\widgets; use humhub\components\Event; +use humhub\libs\Sort; use humhub\modules\ui\menu\MenuEntry; use humhub\modules\ui\menu\MenuLink; use humhub\widgets\JsWidget; @@ -96,7 +97,7 @@ abstract class Menu extends JsWidget { return [ 'menu' => $this, - 'entries' => $this->entries, + 'entries' => $this->getSortedEntries(), 'options' => $this->getOptions(), // Deprecated 'items' => $this->getItems(), @@ -104,6 +105,16 @@ abstract class Menu extends JsWidget ]; } + /** + * Sorts the entry list by sortOrder and returns the sorted entry list. + * + * @return MenuEntry[] + */ + public function getSortedEntries() + { + return Sort::sort($this->entries); + } + /** * @inheritdoc */ @@ -230,14 +241,17 @@ abstract class Menu extends JsWidget * Returns all entries filtered by $type. If no $type filter is given all entries * are returned. * + * If $filterVisible is set, only visible entries will be returned + * * @param null|string $type + * @param bool $filterVisible * @return MenuEntry[] */ - public function getEntries($type = null) + public function getEntries($type = null, $filterVisible = false) { $result = []; - foreach ($this->entries as $entry) { - if(!$type || get_class($entry) === $type || is_subclass_of($entry, $type)) { + foreach ($this->getSortedEntries() as $entry) { + if((!$filterVisible || $entry->isVisible()) && (!$type || get_class($entry) === $type || is_subclass_of($entry, $type))) { $result[] = $entry; } } @@ -245,6 +259,21 @@ abstract class Menu extends JsWidget return $result; } + /** + * @param null $type + * @param bool $filterVisible + * @return MenuEntry|null + */ + public function getFirstEntry($type = null, $filterVisible = false) + { + $entries = $this->getEntries($type, $filterVisible); + if(count($entries)) { + return $entries[0]; + } + + return null; + } + /** * Checks if this menu contains multiple entries of the given $type, or at all if no $type filter is given. * From 4d4107231fa8cf0fa7d7212426e8cee8e33ab25f Mon Sep 17 00:00:00 2001 From: buddh4 Date: Thu, 31 Jan 2019 22:30:10 +0100 Subject: [PATCH 16/17] Fixed admin module tour --- protected/humhub/modules/admin/widgets/AdminMenu.php | 1 + 1 file changed, 1 insertion(+) diff --git a/protected/humhub/modules/admin/widgets/AdminMenu.php b/protected/humhub/modules/admin/widgets/AdminMenu.php index 9627cd2867..c547f09bbb 100644 --- a/protected/humhub/modules/admin/widgets/AdminMenu.php +++ b/protected/humhub/modules/admin/widgets/AdminMenu.php @@ -68,6 +68,7 @@ class AdminMenu extends LeftNavigation 'url' => ['/admin/module'], 'icon' => 'rocket', 'sortOrder' => 500, + 'htmlOptions' => ['class' => 'modules'], 'isActive' => MenuLink::isActiveState('admin', 'module'), 'isVisible' => Yii::$app->user->can(ManageModules::class) ])); From 03f382bf05d02855d6cfc51d83fc6d4d1a7e0808 Mon Sep 17 00:00:00 2001 From: buddh4 Date: Sat, 2 Feb 2019 13:03:00 +0100 Subject: [PATCH 17/17] Enh: Reorganized WallEntry context menu --- protected/humhub/docs/CHANGELOG_DEV.md | 1 + .../humhub/modules/content/widgets/WallEntry.php | 12 ++++++------ .../modules/content/widgets/WallEntryControls.php | 4 ++-- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/protected/humhub/docs/CHANGELOG_DEV.md b/protected/humhub/docs/CHANGELOG_DEV.md index 044208f528..66d99129b3 100644 --- a/protected/humhub/docs/CHANGELOG_DEV.md +++ b/protected/humhub/docs/CHANGELOG_DEV.md @@ -20,3 +20,4 @@ HumHub Change Log (DEVELOP) - Enh: Added Icon abstraction `humhub\modules\ui\icon\widgets\Icon` - Enh: Added `humhub\libs\Html::addPjaxPrevention()` for link options - Enh: Added obj support for `humhub\libs\Sort` +- Enh: Reorganized WallEntry context menu diff --git a/protected/humhub/modules/content/widgets/WallEntry.php b/protected/humhub/modules/content/widgets/WallEntry.php index 46b09497b0..72e37828e2 100644 --- a/protected/humhub/modules/content/widgets/WallEntry.php +++ b/protected/humhub/modules/content/widgets/WallEntry.php @@ -190,12 +190,12 @@ class WallEntry extends Widget $this->addControl($result, [EditLink::class, ['model' => $this->contentObject, 'mode' => $this->editMode, 'url' => $this->getEditUrl()], ['sortOrder' => 200]]); } - $this->addControl($result, [VisibilityLink::class, ['contentRecord' => $this->contentObject], ['sortOrder' => 250]]); - $this->addControl($result, [NotificationSwitchLink::class, ['content' => $this->contentObject], ['sortOrder' => 300]]); - $this->addControl($result, [PermaLink::class, ['content' => $this->contentObject], ['sortOrder' => 400]]); - $this->addControl($result, [PinLink::class, ['content' => $this->contentObject], ['sortOrder' => 500]]); - $this->addControl($result, [MoveContentLink::class, ['model' => $this->contentObject], ['sortOrder' => 550]]); - $this->addControl($result, [ArchiveLink::class, ['content' => $this->contentObject], ['sortOrder' => 600]]); + $this->addControl($result, [PermaLink::class, ['content' => $this->contentObject], ['sortOrder' => 300]]); + $this->addControl($result, [VisibilityLink::class, ['contentRecord' => $this->contentObject], ['sortOrder' => 400]]); + $this->addControl($result, [NotificationSwitchLink::class, ['content' => $this->contentObject], ['sortOrder' => 500]]); + $this->addControl($result, [PinLink::class, ['content' => $this->contentObject], ['sortOrder' => 600]]); + $this->addControl($result, [MoveContentLink::class, ['model' => $this->contentObject], ['sortOrder' => 700]]); + $this->addControl($result, [ArchiveLink::class, ['content' => $this->contentObject], ['sortOrder' => 800]]); if(isset($this->controlsOptions['add'])) { foreach ($this->controlsOptions['add'] as $linkOptions) { diff --git a/protected/humhub/modules/content/widgets/WallEntryControls.php b/protected/humhub/modules/content/widgets/WallEntryControls.php index c5c7edfc1e..bec0189342 100644 --- a/protected/humhub/modules/content/widgets/WallEntryControls.php +++ b/protected/humhub/modules/content/widgets/WallEntryControls.php @@ -48,8 +48,8 @@ class WallEntryControls extends \humhub\widgets\BaseStack * * [MyWidget::class, [...], [...]] * - * @param type $menuItem - * @return type + * @param [] $menuItem + * @return array */ protected function getWallEntryLinkDefinition($menuItem) {