[Monitor Dashboard]: 1. Change menus. 2. Fix visibility edit options. 3. add page_content_header on css

git-svn-id: https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/uoa-monitor-portal/trunk/monitor_dashboard@59729 d315682c-612b-4755-9ff5-7f18f6832af3
This commit is contained in:
Konstantinos Triantafyllou 2020-10-31 16:02:30 +00:00
parent d83f8ca0b2
commit 0d59ccee27
13 changed files with 359 additions and 337 deletions

View File

@ -253,8 +253,8 @@ export class AppComponent implements OnInit, OnDestroy {
this.adminMenuItems.push(new MenuItem("indicators", "Indicators", "", "/admin/" + this.stakeholder.alias + '/indicators', false, [], [], {}, "<i uk-icon=\"image\"></i>"));
this.adminMenuItems.push(new MenuItem("users", "Users", "", "/admin/" + this.stakeholder.alias + "/users", false, [], [], {}, "<i uk-icon=\"users\"></i>"));
this.specialSideBarMenuItem = new MenuItem("back", "Manage profiles", "", "/admin", false, [], null, {});
this.specialSideBarMenuItem.icon = '<span class="uk-icon-button uk-icon portal-button " >' + arrow_left.data + '</span>'; // '<span class="uk-icon-button uk-icon portal-button " uk-icon="chevron-left"></span>';
this.specialSideBarMenuItem.icon = '<span class="uk-icon-button small uk-icon uk-button-secondary">' + arrow_left.data + '</span>'; // '<span class="uk-icon-button uk-icon portal-button " uk-icon="chevron-left"></span>';
this.specialSideBarMenuItem.customClass = 'uk-text-uppercase uk-text-bold uk-text-secondary';
}
this.userMenuItems = [];
/* if (Session.isPortalAdministrator(this.user)) {

View File

@ -81,8 +81,8 @@
</div>
</div>
</div>
<div class="md-card-dropdown uk-inline clickable visibilityMenuIcon">
<i [attr.uk-icon]="stakeholderUtils.isPublicIcon.get(stakeholder.visibility)"
<div class="md-card-dropdown uk-inline clickable visibility">
<i [attr.uk-icon]="stakeholderUtils.visibilityIcon.get(stakeholder.visibility)"
(click)="$event.stopPropagation();$event.preventDefault()"></i>
<div #element uk-dropdown="mode: click; pos: bottom-right; delay-hide: 0; flip: false">
<ul class="uk-nav uk-dropdown-nav">
@ -91,9 +91,9 @@
<a
*ngIf="stakeholder.visibility != v.value"
(click)="$event.stopPropagation();changeStakeholderStatus(stakeholder,v.value);hide(element);$event.preventDefault()">
<i [attr.uk-icon]="stakeholderUtils.isPublicIcon.get( v.value)"></i> {{v.label}}</a>
<i [attr.uk-icon]="stakeholderUtils.visibilityIcon.get( v.value)"></i> {{v.label}}</a>
<a *ngIf="stakeholder.visibility == v.value">
<i [attr.uk-icon]="stakeholderUtils.isPublicIcon.get( v.value)"></i> {{v.label}} <icon
<i [attr.uk-icon]="stakeholderUtils.visibilityIcon.get( v.value)"></i> {{v.label}} <icon
customClass="uk-text-secondary uk-float-right" [ratio]="0.5"
name="bullet"></icon></a>
</li>

View File

@ -1,16 +1,18 @@
<ng-template #selected_filters_pills let-margin="margin">
<!-- <div class="uk-grid uk-grid-small uk-text-small" uk-grid>-->
<span *ngIf="periodFilter.selectedFromAndToValues.length > 0" class="uk-grid-margin" >
<a (click)="clearPeriodFilter()" [class]="((loading)?' uk-disabled':' ')+' uk-link-text '"> <span class="selectedFilterLabel" [class.uk-margin-small-left]="margin" title="Remove {{periodFilter.selectedFromAndToValues}}">
<!-- <div class="uk-grid uk-grid-small uk-text-small" uk-grid>-->
<span *ngIf="periodFilter.selectedFromAndToValues.length > 0" class="uk-grid-margin">
<a (click)="clearPeriodFilter()" [class]="((loading)?' uk-disabled':' ')+' uk-link-text '"> <span
class="selectedFilterLabel" [class.uk-margin-small-left]="margin"
title="Remove {{periodFilter.selectedFromAndToValues}}">
<i uk-icon="close"></i>
<span class="uk-margin-small-left">{{periodFilter.selectedFromAndToValues}}</span>
</span></a>
</span>
<ng-container *ngFor="let filter of filters ">
<ng-container *ngIf="filter.countSelectedValues > 0">
<ng-container *ngFor="let value of filter.values; let i = index; let end = last; ">
<ng-container *ngIf="value.selected">
<span class="uk-grid-margin" >
<ng-container *ngFor="let filter of filters ">
<ng-container *ngIf="filter.countSelectedValues > 0">
<ng-container *ngFor="let value of filter.values; let i = index; let end = last; ">
<ng-container *ngIf="value.selected">
<span class="uk-grid-margin">
<!-- if no grid on the div above, remove it and move class 'selectedFilterLabel' on top span -->
<span class="selectedFilterLabel " [class.uk-margin-small-left]="margin" [title]="'Remove '+value.name"
(click)="value.selected = false; filter.radioValue=''; filter.countSelectedValues=
@ -32,71 +34,65 @@
</a>
</span>
</span>
</ng-container>
</ng-container>
</ng-container>
</ng-container>
<!-- </div>-->
</ng-container>
<!-- </div>-->
</ng-template>
<div id="page_content" [class.greyOut]="filterToggle" (click)=" (filterToggle)?filterToggle = false:filterToggle">
<div>
<div class="uk-navbar-container uk-navbar-transparent uk-sticky uk-sticky-fixed" style="top: 100px; position:
fixed; width: 100%">
<div class="uk-margin-large-left">
<nav class=" ">
<div *ngIf="stakeholder && status === errorCodes.DONE && activeTopic" class="">
<ul *ngIf="activeTopic && activeTopic.categories.length > 1"
class="customTabs uk-tab ">
<ng-template ngFor [ngForOf]="activeTopic.categories" let-category let-i="index">
<li *ngIf="isPublicOrIsMember(category.visibility)"
[class.uk-active]="category.alias ===
<div *ngIf="activeTopic && activeTopic.categories.length > 1" id="page_content_header">
<div class="uk-margin-large-left">
<nav class=" ">
<div *ngIf="stakeholder && status === errorCodes.DONE && activeTopic" class="">
<ul
class="customTabs uk-tab ">
<ng-template ngFor [ngForOf]="activeTopic.categories" let-category let-i="index">
<li *ngIf="isPublicOrIsMember(category.visibility)"
[class.uk-active]="category.alias ===
activeCategory.alias">
<a (click)="navigateTo(stakeholder.alias,activeTopic.alias, category.alias)"
class="uk-margin-remove-bottom uk-h4"
><span class="title">{{category.name}}</span></a>
</li>
</ng-template>
</ul>
</div>
</nav>
<ul *ngIf="activeCategory && countSubCategoriesToShow(activeCategory) > 1"
class="uk-subnav uk-subnav-pill subCategoriesTabs ">
<ng-template ngFor [ngForOf]="activeCategory.subCategories" let-subCategory let-i="index">
<li *ngIf="isPublicOrIsMember(subCategory.visibility)"
[ngClass]="(subCategory.alias === activeSubCategory.alias)?'uk-active':''">
<a (click)="navigateTo(stakeholder.alias,activeTopic.alias,activeCategory.alias, subCategory.alias)"
class="uk-margin-remove-bottom uk-h3"
><span>{{subCategory.name}}</span></a>
<a (click)="navigateTo(stakeholder.alias,activeTopic.alias, category.alias)"
class="uk-margin-remove-bottom uk-h4"
><span class="title">{{category.name}}</span></a>
</li>
</ng-template>
</ul>
<div *ngIf="countSelectedFilters() > 0" class="uk-grid uk-grid-small uk-margin-bottom">
<span class="uk-grid-margin">Filters: </span>
<ng-container *ngTemplateOutlet="selected_filters_pills; context: {margin:true}"></ng-container>
</div>
</div>
</nav>
<ul *ngIf="activeCategory && countSubCategoriesToShow(activeCategory) > 1"
class="uk-subnav uk-subnav-pill subCategoriesTabs ">
<ng-template ngFor [ngForOf]="activeCategory.subCategories" let-subCategory let-i="index">
<li *ngIf="isPublicOrIsMember(subCategory.visibility)"
[ngClass]="(subCategory.alias === activeSubCategory.alias)?'uk-active':''">
<a (click)="navigateTo(stakeholder.alias,activeTopic.alias,activeCategory.alias, subCategory.alias)"
class="uk-margin-remove-bottom uk-h3"
><span>{{subCategory.name}}</span></a>
</li>
</ng-template>
</ul>
<div *ngIf="countSelectedFilters() > 0" class="uk-grid uk-grid-small uk-margin-bottom">
<span class="uk-grid-margin">Filters: </span>
<ng-container *ngTemplateOutlet="selected_filters_pills; context: {margin:true}"></ng-container>
</div>
</div>
<div id="page_content_inner" class="" [style.margin-top.px]="(24+
(activeCategory &&
activeCategory.subCategories.length > 1?40:0)+(activeTopic &&
activeTopic.categories.length > 1?20:0)+(countSelectedFilters()
> 0?40:0))">
<div class=" indicators">
<div *ngIf="privateStakeholder">
<div class="uk-text-center uk-height-medium">
<div class="uk-h3 "><i>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black" width="24px" height="24px">
<path d="M0 0h24v24H0z" fill="none"/>
<path
d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z"/>
</svg>
</i>
Private data
</div>
<div class="uk-text-large "></div>
</div>
<div id="page_content_inner" class="">
<div class=" indicators">
<div *ngIf="privateStakeholder">
<div class="uk-text-center uk-height-medium">
<div class="uk-h3 "><i>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black" width="24px" height="24px">
<path d="M0 0h24v24H0z" fill="none"/>
<path
d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z"/>
</svg>
</i>
Private data
</div>
<div class="uk-text-large "></div>
</div>
<div *ngIf="!privateStakeholder">
</div>
<div *ngIf="!privateStakeholder">
<div
*ngIf="(activeSubCategory && (activeSubCategory.charts.length == 0 ||
(activeSubCategory.charts.length == 1 && activeSubCategory.charts[0].indicators.length == 0)))
@ -183,7 +179,8 @@
{{indicatorPath.type}}
</button>
</div>
<div *ngIf="properties.environment == 'development'">Filtered: {{chartsActiveType.get(i + '-' + j).filtersApplied}} out of
<div *ngIf="properties.environment == 'development'">
Filtered: {{chartsActiveType.get(i + '-' + j).filtersApplied}} out of
{{countSelectedFilters()}}</div>
<iframe *ngIf="chartsActiveType.get(i + '-' + j).source !== 'image'"
[src]="chartsActiveType.get(i + '-' + j).safeResourceUrl"
@ -201,24 +198,23 @@
</ng-template>
</div>
</div>
<div *ngIf="!loading && !privateStakeholder && activeSubCategory"
class="uk-width-1-1 uk-text-center uk-text-muted">
<div *ngIf="!loading && !privateStakeholder && activeSubCategory"
class="uk-width-1-1 uk-text-center uk-text-muted">
<span>Send us your <a [href]="mailText" target="_self" (click)="mailMe()">feedback</a>.</span>
</div>
</div>
</div>
</div>
<div *ngIf="stakeholder" class="uk-margin-xlarge-top">
<bottom *ngIf="properties" [darkBackground]="false"
[centered]="true" [properties]="properties" [showMenuItems]="true"></bottom>
</div>
</div>
<div *ngIf="stakeholder" class="uk-margin-xlarge-top">
<bottom *ngIf="properties" [darkBackground]="false"
[centered]="true" [properties]="properties" [showMenuItems]="true"></bottom>
</div>
</div>
</div>
<!--(click)="filterToggle= !filterToggle"
[style.display]="(filterToggle?'none':'inherit')"-->
<div *ngIf="stakeholder && !privateStakeholder" href="#style_switcher" uk-toggle="" id="filters_switcher_toggle" >
<div *ngIf="stakeholder && !privateStakeholder" href="#style_switcher" uk-toggle="" id="filters_switcher_toggle">
<i class=" uk-text-muted">
<svg style="margin-top: 8px;" xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24"
viewBox="0 0 20 20"
@ -226,31 +222,34 @@
<g>
<path d="M0,0h24 M24,24H0" fill="none"/>
<path
d="M4.25,5.61C6.57,8.59,10,13,10,13v5c0,1.1,0.9,2,2,2h0c1.1,0,2-0.9,2-2v-5c0,0,3.43-4.41,5.75-7.39 C20.26,4.95,19.79,4,18.95,4H5.04C4.21,4,3.74,4.95,4.25,5.61z"/>
d="M4.25,5.61C6.57,8.59,10,13,10,13v5c0,1.1,0.9,2,2,2h0c1.1,0,2-0.9,2-2v-5c0,0,3.43-4.41,5.75-7.39 C20.26,4.95,19.79,4,18.95,4H5.04C4.21,4,3.74,4.95,4.25,5.61z"/>
<path d="M0,0h24v24H0V0z" fill="none"/>
</g>
</svg>
</i>
</div>
<div *ngIf="stakeholder && !privateStakeholder" id="style_switcher" class=" uk-offcanvas filters_switcher"
uk-offcanvas="flip:true" mode="slide" overlay="" style="z-index:982;" >
uk-offcanvas="flip:true" mode="slide" overlay="" style="z-index:982;">
<div class="uk-offcanvas-bar offcanvas-white">
<div class="uk-float-right" >
<div class="uk-float-right">
<button class="uk-offcanvas-close uk-close uk-icon" type="button" uk-close=""></button>
</div>
<div class="uk-padding">
<div class="uk-grid uk-flex uk-flex-middle"><div class="uk-h4 ">Filters</div><a *ngIf="countSelectedFilters() > 1"
class=" portal-link uk-width-1-2" (click)="clearAll()"> Clear All </a></div>
<div class="uk-grid uk-flex uk-flex-middle">
<div class="uk-h4 ">Filters</div>
<a *ngIf="countSelectedFilters() > 1"
class=" portal-link uk-width-1-2" (click)="clearAll()"> Clear All </a></div>
<div class="uk-grid uk-grid-small uk-text-small" uk-grid>
<ng-container *ngTemplateOutlet="selected_filters_pills; context: {margin:false}"></ng-container>
</div>
<div class="uk-margin-small-top"><i class="uk-text-muted uk-text-small"> If your filter selection cannot be applied to a chart, that chart will appear grayed-out.</i></div>
<div class="uk-margin-small-top"><i class="uk-text-muted uk-text-small"> If your filter selection cannot be
applied to a chart, that chart will appear grayed-out.</i></div>
<ul class="uk-list uk-list-divider uk-margin-medium">
<li>
<range-filter [filter]="periodFilter" yearMin="2000" yearMax="2020" [mandatoryRange]="true"
(onFilterChange)="filter()"></range-filter>
<range-filter [filter]="periodFilter" yearMin="2000" yearMax="2020" [mandatoryRange]="true"
(onFilterChange)="filter()"></range-filter>
</li>
<ng-container *ngFor="let filter of filters ">
<li *ngIf="filter.values.length >0">
@ -262,7 +261,7 @@
</div>
</div>
</div>
</div>
<ng-template #description let-indicator="indicator">
<span class="descriptionIcon"

View File

@ -504,16 +504,16 @@
<!--</modal-alert>-->
<ng-template #visibilityOptions let-indicator="indicator" >
<span class="uk-invisible-hover uk-padding-remove" (click)="$event.stopPropagation();$event.preventDefault()">
<i [attr.uk-icon]="stakeholderUtils.isPublicIcon.get(indicator.visibility)" class="clickable visibilityMenuIcon"></i>
<i [attr.uk-icon]="stakeholderUtils.visibilityIcon.get(indicator.visibility)" class="clickable visibility"></i>
<div #element uk-dropdown="mode: click; pos: bottom-left; delay-hide: 0; flip: false">
<ul class="uk-nav uk-dropdown-nav">
<li *ngFor="let v of stakeholderUtils.visibility" [class.selectedVisibility]="v.value == indicator.visibility">
<a
*ngIf="indicator.visibility != v.value"
(click)="$event.stopPropagation();toggleIndicatorStatus(indicator._id, indicator,v.value);hide(element);$event.preventDefault()">
<i [attr.uk-icon]="stakeholderUtils.isPublicIcon.get( v.value)"></i> {{v.label}}</a>
<i [attr.uk-icon]="stakeholderUtils.visibilityIcon.get( v.value)"></i> {{v.label}}</a>
<a *ngIf="indicator.visibility == v.value">
<i [attr.uk-icon]="stakeholderUtils.isPublicIcon.get( v.value)"></i> {{v.label}} <icon
<i [attr.uk-icon]="stakeholderUtils.visibilityIcon.get( v.value)"></i> {{v.label}} <icon
customClass="uk-text-secondary uk-float-right" [ratio]="0.5"
name="bullet"></icon></a>
</li>

View File

@ -1,52 +1,38 @@
<aside id="sidebar_main">
<div id="sidebar_content">
<!--<div *ngIf="stakeholder" class="sidebar_main_header uk-margin-remove-bottom uk-text-center">
<img *ngIf="properties.environment =='beta' || properties.environment =='development'" class="badge"
[src]="'assets/common-assets/'+(properties.environment =='beta'?'beta_flag.svg':'prototype_flag.svg')"
[alt]="properties.environment">
<div class="uk-position-relative uk-margin-small-top">
&lt;!&ndash; <div *ngIf="!stakeholder.defaultId" class="uk-badge default">Default</div>&ndash;&gt;
&lt;!&ndash; <img class="logo" *ngIf="stakeholder.logoUrl" [src]="stakeholder.logoUrl">&ndash;&gt;
&lt;!&ndash; <div class="uk-margin-top" *ngIf="!stakeholder.logoUrl" >{{stakeholder.name}}</div>&ndash;&gt;
<a [href]="properties.domain + properties.baseLink"><div class="portalLogo logo" ></div></a>
</div>
</div>-->
<div *ngIf="stakeholder && stakeholder.topics[topicIndex]" class="menu_section uk-margin-top">
<div class="uk-text-center">
<a [routerLink]="'/admin/' + stakeholder.alias" class="uk-h5 uk-link-heading">
<a [routerLink]="'/admin/' + stakeholder.alias"
class="uk-link-heading uk-text-uppercase uk-flex uk-flex-middle uk-flex-center">
<span class="" uk-icon="icon:close;ratio:1.8"></span>
<span class="uk-margin-left">Indicators</span>
<span *ngIf="open" class="uk-margin-left">Indicators</span>
</a>
</div>
<ul class="uk-list">
<li class="submenu_trigger">
<li class="submenu_trigger">
<ul class="uk-nav-default">
<ng-template ngFor [ngForOf]="stakeholder.topics" let-topic let-i="index">
<li
[title]="topic.name+': '+(topic.isActive?'Active':'Inactive')+', '+(topic.isPublic?'Public':'Private')"
class="uk-margin-top uk-margin-small-right uk-visible-toggle"
[class.uk-active]="topicIndex == i"
[class.uk-text-bold]="topicIndex == i">
<a [routerLink]="'/admin/'+stakeholder.alias + '/indicators/' + topic.alias" class="uk-flex">
<span *ngIf="topic.icon" class="menu_icon">
<!-- <span [innerHTML]="satinizeHTML(topic.icon)"></span>-->
</span>
<div class="menu_title uk-width-expand uk-text-center">
<div class="menu_section uk-margin-xlarge-top">
<ul class="uk-list">
<ng-template ngFor [ngForOf]="stakeholder.topics" let-topic let-i="index">
<li class="uk-visible-toggle"
[class.uk-active]="topicIndex == i">
<a [routerLink]="'/admin/'+stakeholder.alias + '/indicators/' + topic.alias"
class="uk-flex uk-flex-middle">
<span *ngIf="topic.icon"></span>
<div class="uk-width-expand uk-position-relative uk-flex uk-flex-middle"
[class.uk-flex-center]="open">
<span>
<ng-container *ngTemplateOutlet="visibilityOptions; context:
{i:i, type: 'topic',
visibility: stakeholder.topics[i].visibility}"></ng-container>
{{topic.name}}
</div>
<div class="uk-invisible-hover" (click)="$event.stopPropagation();$event.preventDefault()">
<i class=" onHover" uk-icon="more-vertical"></i>
<div #element uk-dropdown="mode: click; pos: bottom-right; offset: 5; delay-hide: 0; flip: false"
class="uk-padding-remove-horizontal">
{i:i, type: 'topic', visibility: stakeholder.topics[i].visibility}">
</ng-container>
</span>
<span class="uk-text-truncate" [class.uk-width-3-5]="!open">{{topic.name}}</span>
<span class="uk-invisible-hover color"
(click)="$event.stopPropagation();$event.preventDefault()">
<span class="uk-icon uk-position-center-right" uk-icon="more-vertical"></span>
<div #element uk-dropdown="mode: click; pos: bottom-right; offset: 5; delay-hide: 0; flip: false">
<ul class="uk-nav uk-dropdown-nav uk-list">
<li><a (click)="editTopicOpen(i); hide(element)">Edit</a></li>
<ng-template ngFor [ngForOf]="stakeholderUtils.visibility" let-v>
<li *ngIf="topic.visibility != v.value"><a (click)="toggleTopicStatus(i, v.value);
hide(element)">
hide(element)">
{{'Make ' + v.label.toLowerCase()}}</a>
</li>
</ng-template>
@ -59,22 +45,22 @@
</li>
</ul>
</div>
</div>
</a>
</li>
</ng-template>
<li class="uk-text-center uk-margin-top uk-visible-toggle">
<span (click)="editTopicOpen(-1); $event.preventDefault()">
<!-- <span class="menu_icon"><i class="material-icons">add</i></span>-->
<span
class="menu_icon uk-icon-button portal-icon-button icon-button-small"><i
uk-icon="icon:plus; ratio:0.7"></i></span>
<span class="uk-hidden-hover"> Create new topic</span>
</span>
</span>
</div>
</a>
</li>
</ul>
</li>
</ul>
</ng-template>
<li class="uk-margin-top" [class.uk-visible-toggle]="open">
<span (click)="editTopicOpen(-1); $event.preventDefault()"
class="clickable uk-flex uk-flex-middle uk-flex-center">
<span class="uk-icon-button small portal-icon-button" [class.uk-margin-left]="open">
<icon name="add"></icon>
</span>
<span class="uk-hidden-hover space" [class.uk-hidden]="!open"> Create new topic</span>
</span>
</li>
</ul>
</div>
</div>
</div>
<div *ngIf="!isSmallScreen" id="sidebar_switcher_toggle" class="clickable "
@ -84,29 +70,25 @@
</div>
</aside>
<div id="page_content">
<div *ngIf="stakeholder"
class="uk-navbar-container uk-sticky uk-sticky-fixed"
style="top: 100px; position: fixed; width: 100%">
<div *ngIf="stakeholder" id="page_content_header">
<div class="uk-margin-large-left">
<nav class=" ">
<div *ngIf="stakeholder && stakeholder.topics[topicIndex]" class="">
<ul *ngIf="stakeholder.topics[topicIndex] && stakeholder.topics[topicIndex].categories.length > 0"
class="customTabs uk-tab admin uk-flex uk-flex-middle">
class="customTabs uk-tab ignore admin uk-flex uk-flex-middle">
<ng-template ngFor [ngForOf]="stakeholder.topics[topicIndex].categories" let-category let-i="index">
<li class="uk-visible-toggle"
<li class="uk-visible-toggle uk-flex uk-flex-middle"
[class.uk-active]="category.alias === stakeholder.topics[topicIndex].categories[categoryIndex].alias">
<a (click)="toggleCategory(i)"
class="uk-margin-remove-bottom uk-h4"
>
<ng-container *ngTemplateOutlet="visibilityOptions; context:
{i:i, type: 'cat',
visibility: stakeholder.topics[topicIndex].categories[i].visibility}"></ng-container>
<ng-container *ngTemplateOutlet="visibilityOptions; context:
{i:i, type: 'cat',
visibility: stakeholder.topics[topicIndex].categories[i].visibility}">
</ng-container>
<a (click)="toggleCategory(i)">
<span class="title"> {{category.name}}</span>
<span class="uk-invisible-hover"
(click)="$event.stopPropagation();$event.preventDefault()">
<i class=" onHover" uk-icon="more-vertical"></i>
<div #element uk-dropdown="mode: click; pos: bottom-right; offset: 5; delay-hide: 0; flip: false"
class="uk-padding-remove-horizontal">
</a>
<span class="uk-invisible-hover" (click)="$event.stopPropagation();$event.preventDefault()">
<span class="uk-icon clickable" uk-icon="more-vertical"></span>
<div #element uk-dropdown="mode: click; pos: bottom-right; offset: 5; delay-hide: 0; flip: false">
<ul class="uk-nav uk-dropdown-nav">
<li><a (click)="editCategoryOpen(i); hide(element)">Edit</a></li>
<ng-template ngFor [ngForOf]="stakeholderUtils.visibility" let-v>
@ -122,14 +104,14 @@
</ul>
</div>
</span>
</a>
</li>
</ng-template>
<li>
<span href="#" (click)="editCategoryOpen();$event.preventDefault()" class="uk-visible-toggle clickable">
<span class="menu_icon uk-icon-button portal-icon-button icon-button-small"><i
uk-icon="icon:plus; ratio:0.7"></i></span>
<span class="uk-hidden-hover uk-te"> Create new category</span>
<li class="uk-visible-toggle">
<span (click)="editCategoryOpen(); $event.preventDefault()" class="clickable">
<span class="uk-icon-button small portal-icon-button">
<icon name="add"></icon>
</span>
<span class="uk-hidden-hover space">Create new category</span>
</span>
</li>
</ul>
@ -137,58 +119,57 @@
</nav>
<ul *ngIf=" stakeholder.topics[topicIndex].categories[categoryIndex] &&
stakeholder.topics[topicIndex].categories[categoryIndex].subCategories.length > 0"
class="uk-subnav uk-subnav-pill subCategoriesTabs admin">
class="uk-subnav uk-subnav-pill subCategoriesTabs ignore admin uk-flex uk-flex-middle">
<ng-template ngFor [ngForOf]="stakeholder.topics[topicIndex].categories[categoryIndex].subCategories"
let-subCategory let-i="index">
<li
[class.uk-active]="(subCategory.alias ===
<li [class.uk-active]="(subCategory.alias ===
stakeholder.topics[topicIndex].categories[categoryIndex].subCategories[subCategoryIndex].alias)"
class=" uk-visible-toggle uk-flex uk-flex-middle">
<ng-container *ngTemplateOutlet="visibilityOptions; context:
{i:i, type: 'sub',
visibility: stakeholder.topics[topicIndex].categories[categoryIndex].subCategories[i].visibility}"></ng-container>
<a (click)="chooseSubcategory(categoryIndex, i);$event.preventDefault()"
class="uk-margin-remove-bottom"
><span>{{subCategory.name}}</span>
class="uk-visible-toggle uk-position-relative uk-padding-remove-horizontal">
<span>
<ng-container *ngTemplateOutlet="visibilityOptions; context:
{i:i, type: 'sub',
visibility: stakeholder.topics[topicIndex].categories[categoryIndex].subCategories[i].visibility}">
</ng-container>
<a (click)="chooseSubcategory(categoryIndex, i);$event.preventDefault()"
class="space">
<span>{{subCategory.name}}</span>
</a>
<span class="uk-invisible-hover uk-position-center-right color"
(click)="$event.stopPropagation();$event.preventDefault()">
<span class="clickable" uk-icon="more-vertical"></span>
<div #element uk-dropdown="mode: click; pos: bottom-right; offset: 5; delay-hide: 0; flip: false">
<ul class="uk-nav uk-dropdown-nav">
<li><a (click)="editSubCategoryOpen(i); hide(element)">Edit</a></li>
<ng-template ngFor [ngForOf]="stakeholderUtils.visibility" let-v>
<li *ngIf="subCategory.visibility != v.value"><a (click)="toggleSubcategoryStatus(i, v.value);
hide(element)">
{{'Make ' + v.label.toLowerCase()}}</a>
</li>
</ng-template>
<hr *ngIf="!stakeholder.topics[topicIndex].categories[categoryIndex].subCategories[i].defaultId"
class="uk-nav-divider">
<li *ngIf="!stakeholder.topics[topicIndex].categories[categoryIndex].subCategories[i].defaultId"><a
(click)="deleteSubcategoryOpen(i, 'delete'); hide(element)">Delete</a>
</a>
<span class="uk-invisible-hover"
(click)="$event.stopPropagation();$event.preventDefault()">
<i class=" onHover" uk-icon="more-vertical"></i>
<div #element uk-dropdown="mode: click; pos: bottom-right; offset: 5; delay-hide: 0; flip: false"
class="uk-padding-remove-horizontal">
<ul class="uk-nav uk-dropdown-nav">
<li><a (click)="editSubCategoryOpen(i); hide(element)">Edit</a></li>
<ng-template ngFor [ngForOf]="stakeholderUtils.visibility" let-v>
<li *ngIf="subCategory.visibility != v.value"><a (click)="toggleSubcategoryStatus(i, v.value);
hide(element)">
{{'Make ' + v.label.toLowerCase()}}</a>
</li>
</ng-template>
<hr *ngIf="!stakeholder.topics[topicIndex].categories[categoryIndex].subCategories[i].defaultId"
class="uk-nav-divider">
<li *ngIf="!stakeholder.topics[topicIndex].categories[categoryIndex].subCategories[i].defaultId"><a
(click)="deleteSubcategoryOpen(i, 'delete'); hide(element)">Delete</a>
</li>
</ul>
</div>
</span>
</ul>
</div>
</span>
</span>
</li>
</ng-template>
<li>
<span href="#" (click)="editSubCategoryOpen();$event.preventDefault()"
class="uk-padding-remove uk-visible-toggle clickable">
<span class="menu_icon uk-icon-button portal-icon-button icon-button-small"><i
uk-icon="icon:plus; ratio:0.7"></i></span>
<span class="uk-hidden-hover"> Create new sub category</span>
</span>
<li class="uk-visible-toggle ignore">
<span (click)="editSubCategoryOpen(); $event.preventDefault()" class="clickable">
<span class="uk-icon-button small portal-icon-button">
<icon name="add"></icon>
</span>
<span class="uk-hidden-hover space">Create new subcategory</span>
</span>
</li>
</ul>
</div>
</div>
<div id="page_content_inner" style="margin-top: 40px;">
<div id="page_content_inner">
<indicators *ngIf="stakeholder" [properties]="properties"
[topicIndex]="topicIndex"
[categoryIndex]="categoryIndex"
@ -221,24 +202,27 @@
<ng-template #visibilityOptions let-type="type" let-i="i" let-visibility="visibility">
<span class="uk-invisible-hover uk-padding-remove" (click)="$event.stopPropagation();$event.preventDefault()">
<i [attr.uk-icon]="stakeholderUtils.isPublicIcon.get(visibility)"
class="clickable visibilityMenuIcon"></i>
<div #element uk-dropdown="mode: click; pos: bottom-left; delay-hide: 0; flip: false">
<ul class="uk-nav uk-dropdown-nav">
<li *ngFor="let v of stakeholderUtils.visibility"
[class.selectedVisibility]="v.value == visibility">
<a
*ngIf="visibility != v.value"
(click)="$event.stopPropagation();toggleStatusByIndex(i, v.value, type);hide(element);$event.preventDefault()">
<i [attr.uk-icon]="stakeholderUtils.isPublicIcon.get( v.value)"></i> {{v.label}}</a>
<a *ngIf="visibility == v.value">
<i [attr.uk-icon]="stakeholderUtils.isPublicIcon.get( v.value)"></i> {{v.label}}
<icon
customClass="uk-text-secondary uk-float-right" [ratio]="0.5"
name="bullet"></icon></a>
</li>
</ul>
</div>
</span>
<span class="uk-invisible-hover visibility small" (click)="$event.stopPropagation();$event.preventDefault()">
<span class="clickable">
<icon [name]="stakeholderUtils.visibilityIcon.get(visibility)" [ratio]="0.5"></icon>
</span>
<div #element uk-dropdown="mode: click; pos: bottom-left; delay-hide: 0; flip: false">
<ul class="uk-nav uk-dropdown-nav">
<li *ngFor="let v of stakeholderUtils.visibility">
<a *ngIf="visibility != v.value"
(click)="$event.stopPropagation();toggleStatusByIndex(i, v.value, type);hide(element);$event.preventDefault()">
<icon [name]="stakeholderUtils.visibilityIcon.get(v.value)" ratio="0.8"></icon>
<span> {{v.label}}</span>
</a>
<a *ngIf="visibility == v.value" class="uk-position-relative">
<icon [name]="stakeholderUtils.visibilityIcon.get(v.value)" [ratio]="0.8"></icon>
<span> {{v.label}}</span>
<span class="uk-position-center-right">
<icon customClass="uk-text-secondary" [ratio]="0.5" name="bullet"></icon>
</span>
</a>
</li>
</ul>
</div>
</span>
</ng-template>

View File

@ -201,6 +201,7 @@ export class TopicComponent implements OnInit, OnDestroy, IDeactivateComponent {
this.stakeholder._id,
this.stakeholder.topics[index]._id
];
console.log('here')
this.toggleStatus(this.stakeholder.topics[index], path, visibility);
}

View File

@ -15,7 +15,7 @@ import {InputModule} from "../openaireLibrary/dashboard/sharedComponents/input/i
import {ClickModule} from "../openaireLibrary/utils/click/click.module";
import {AdminDashboardGuard} from "../utils/adminDashboard.guard";
import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
import {preview, bullet} from "../openaireLibrary/utils/icons/icons";
import {preview, bullet, add, earth, lock, group} from "../openaireLibrary/utils/icons/icons";
import {IconsModule} from "../openaireLibrary/utils/icons/icons.module";
@NgModule({
@ -36,6 +36,6 @@ import {IconsModule} from "../openaireLibrary/utils/icons/icons.module";
})
export class TopicModule {
constructor(private iconsService: IconsService) {
this.iconsService.registerIcons([preview, bullet]);
this.iconsService.registerIcons([preview, bullet, add, earth, lock, group]);
}
}

View File

@ -35,10 +35,10 @@ export class StakeholderUtils {
{icon: 'brightness_1', value: false, label: 'Inactive'},
];
isPublicIcon: Map<Visibility, string> = new Map<Visibility, string> ([
["PUBLIC", 'world'],
visibilityIcon: Map<Visibility, string> = new Map<Visibility, string> ([
["PUBLIC", 'earth'],
["PRIVATE", 'lock'],
["RESTRICTED", 'users']
["RESTRICTED", 'group']
]);
isActiveIcon: string = 'brightness_1';

View File

@ -5,18 +5,38 @@
text-align: left;
}
.sidebar_main_swipe.sidebar_mini .uk-dropdown {
min-width: auto;
}
.uk-dropdown > ul {
padding: 0 !important;
}
.uk-dropdown-nav > li > a, .uk-dropdown-nav > li:hover > a {
padding: 4px 10px;
color: var(--text-color);
padding: 3px 10px;
color: rgb(var(--text-color));
font-weight: 400 !important;
font-size: var(--small-font-size);
font-size: var(--xs-font-size);
font-family: "Open Sans", sans-serif;
}
.uk-dropdown-nav > li, .uk-dropdown-nav > li > a {
position: relative;
}
.uk-dropdown-nav > li:hover::before {
content: "";
width: 100%;
height: 100%;
position: absolute;
left: 0;
background-color: var(--secondary-color);
opacity: 0.3;
}
.uk-dropdown .uk-nav-divider {
margin: 4px 10px;
margin: 3px 10px;
border-color: var(--secondary-color);
}

View File

@ -25,52 +25,78 @@
left: 0;
z-index: 981;
background: #fff;
transition: 0.5s;
-webkit-transition: 0.5s;
-moz-transition: 0.5s;
-ms-transition: 0.5s;
-o-transition: 0.5s;
transition-property: width;
}
.sidebar_main_swipe.sidebar_mini #sidebar_switcher_toggle {
left: calc(var(--sidebar-mini-width) + 0px);
left: var(--sidebar-mini-width);
}
.sidebar_main_swipe #sidebar_switcher_toggle {
left: calc(var(--sidebar-width) + 0px);
left: var(--sidebar-width);
}
#sidebar_main .menu_section > ul > li > a, #sidebar_main .menu_section > ul > li > ul > li > a {
#sidebar_main .menu_section {
min-height: 30vh;
}
#sidebar_main .menu_section ul:not(.uk-dropdown-nav) > li, #sidebar_main .special_section ul:not(.uk-dropdown-nav) > li {
padding: 5px 0;
}
#sidebar_main .menu_section ul:not(.uk-dropdown-nav) > li > a, #sidebar_main .special_section ul:not(.uk-dropdown-nav) > li > a {
display: block;
font-size: var(--sidebar-font-size);
color: rgba(0, 0, 0, .7);
color: rgba(var(--text-color), 0.5);
}
#sidebar_main .menu_section > ul > li > a:hover, #sidebar_main .menu_section > ul > li > ul > li > a:hover{
#sidebar_main .menu_section ul:not(.uk-dropdown-nav) > li:hover > a, #sidebar_main .special_section ul:not(.uk-dropdown-nav) > li:hover > a {
color: var(--secondary-color);
}
#sidebar_main .menu_section > ul li.current_section > a, #sidebar_main .menu_section > ul li.current_section > ul > li.current_section > a {
#sidebar_main .menu_section ul:not(.uk-dropdown-nav) li.uk-active > a, #sidebar_main .special_section ul:not(.uk-dropdown-nav) > li.uk-active > a {
color: var(--primary-color);
font-weight: 700;
}
#sidebar_switcher_toggle {
top: 320px !important;
top: 50%;
transform: translateY(-50%);
position: fixed;
background: #ffffff;
border: 1px solid var(--portal-dark-color);
border: 1px solid rgb(var(--text-color));
border-left: 0;
cursor: pointer;
padding: 0 4px;
width: 10px;
height: 66px;
z-index: 981;
-webkit-transition: 0.5s;
-moz-transition: 0.5s;
-ms-transition: 0.5s;
-o-transition: 0.5s;
transition-property: left;
}
.sidebar_main_swipe #page_content {
padding-left: var(--sidebar-width);
padding-top: var(--header-height);
transition: 0.5s;
-webkit-transition: 0.5s;
-moz-transition: 0.5s;
-ms-transition: 0.5s;
-o-transition: 0.5s;
}
/*Sidebar close*/
.sidebar_main_swipe:not(.sidebar_main_active):not(.sidebar_mini) #page_content {
padding-left: 0;
transition: 0.5s;
}
.sidebar_main_swipe:not(.sidebar_main_active):not(.sidebar_mini) #sidebar_main #sidebar_content {
@ -86,18 +112,18 @@
.sidebar_main_swipe.sidebar_mini #page_content {
padding-left: var(--sidebar-mini-width);
transition: 0.5s;
-webkit-transition: 0.5s;
-moz-transition: 0.5s;
-ms-transition: 0.5s;
-o-transition: 0.5s;
}
.sidebar_mini #sidebar_main #sidebar_content {
width: var(--sidebar-mini-width);
}
#sidebar_main .menu_section > ul > li > a {
display: block;
}
#sidebar_main #sidebar_content {
border-right: 1px solid var(--portal-dark-color);
border-right: 1px solid rgb(var(--text-color));
}
#page_content {
@ -105,6 +131,19 @@
background-color: var(--background-color);
}
#page_content_header + #page_content_inner {
margin-top: 100px;
}
#page_content_header {
position: fixed;
background: var(--background-color);
top: var(--header-height);
z-index: 980;
width: 100%;
height: 100px;
}
#page_content_inner {
padding: 90px;
}

View File

@ -1,12 +1,11 @@
.uk-subnav-pill, .uk-tab {
.uk-subnav-pill:not(.ignore), .uk-tab:not(.ignore) {
flex-wrap: nowrap;
overflow-x: auto;
}
.uk-subnav-pill > * > a, .uk-subnav>*>a:first-child {
.uk-subnav-pill > * > a, .uk-subnav>*>a:first-child, .uk-subnav-pill > * > span > a {
color: currentColor !important;
font-size: 13px;
text-transform: none;
opacity: 0.5;
border-radius: 40px;
border: 1px solid currentColor !important;
@ -14,31 +13,63 @@
line-height: 18px;
}
.uk-tab > * > a {
color: currentColor !important;
opacity: 0.5;
.uk-subnav-pill > * > *, .uk-subnav > * > *:first-child {
text-transform: none;
font-size: var(--font-size);
color: rgb(var(--text-color));
}
.uk-subnav-pill > li > a:hover {
.uk-subnav-pill > li > a:hover, .uk-subnav-pill > li > span > a:hover {
border-color: var(--secondary-color);
color: var(--secondary-color) !important;
background-color: var(--contrast-color);
opacity: 1;
}
.uk-subnav-pill > li.uk-active > a {
.uk-subnav-pill > li.uk-active > a, .uk-subnav-pill > li.uk-active > span > a {
opacity: 1;
border-color: var(--primary-color);
border-color: var(--primary-color) !important;
color: var(--contrast-color) !important;
background-color: var(--primary-color);
font-weight: bold;
}
.uk-tab > li > a {
color: rgb(var(--text-color), 0.5) !important;
font-size: var(--small-font-size);
font-family: "Open Sans", sans-serif !important;
text-transform: capitalize;
}
.uk-tab > li:hover > a {
color: var(--secondary-color);
opacity: 1;
color: var(--secondary-color) !important;
}
.uk-tab > li.uk-active > a {
opacity: 1;
color: var(--primary-color) !important;
font-weight: 700;
}
.customTabs.uk-tab > li > a, .customTabs.uk-tab > li.uk-active > a,.customTabs.uk-tab > li > a:focus, .customTabs.uk-tab > li > a:hover {
border: 0 transparent !important;
}
.subCategoriesTabs > li > a{
font-size: 13px;
}
.uk-tab.customTabs::before {
border-bottom: none !important;
}
/*dashboard tabs*/
.customTabs.uk-tab.admin > li.uk-active > a .title {
border-bottom: 3px solid var(--portal-main-color);
margin-left: 3px;
}
.uk-subnav-pill.subCategoriesTabs.admin > li.uk-active > a{
border: 1px solid var(--primary-color);
background-color: var(--primary-color);
}

View File

@ -1,17 +1,22 @@
:root {
--font-size: 16px;
--text-color: #1A1A1A;
--text-color: 26,26,26;
--muted-color: #4D4D4D;
--xs-font-size: 12px;
--small-font-size: 14px;
--large-font-size: 18px;
}
body {
color: var(--text-color);
color: rgb(var(--text-color));
font-size: var(--font-size);
font-family: "Open Sans", sans-serif;
}
.color {
color: rgb(var(--text-color));
}
.uk-text-small {
font-size: var(--small-font-size);
}
@ -23,3 +28,9 @@ body {
.uk-text-muted {
color: var(--muted-color);
}
.uk-logo {
font-family: "Roboto", sans-serif;
font-size: 24px;
color: rgb(var(--text-color));
}

View File

@ -65,7 +65,7 @@
/*Sidebar*/
/*Style*/
/*#sidebar_main .menu_section > ul li.current_section > a {*/
/*#sidebar_main .menu_section > ul li.uk-active > a {*/
/* font-size: var(--sidebar-font-size);*/
/* color: rgba(0,0,0,.7);*/
/*}*/
@ -84,7 +84,7 @@
}
/*Sidebar Rotation*/
.stakeholderPage #sidebar_main .menu_section > ul > li.current_section {
.stakeholderPage #sidebar_main .menu_section > ul > li.uk-active {
width: 150px;
height: 100%;
transition: 0.70s;
@ -110,7 +110,8 @@
/*margin-right: auto;*/
/*margin-left: auto;*/
}
.sidebar_mini #sidebar_main .menu_section > ul > li.current_section{
.stakeholderPage.sidebar_mini #sidebar_main .menu_section > ul > li.uk-active{
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-o-transform: rotate(0deg);
@ -118,60 +119,13 @@
transform: rotate(0deg);
width: inherit;
height: inherit;
margin: 0px 0px;
margin: 0;
}
.stakeholderPage #sidebar_main #sidebar_content, .stakeholderPage #sidebar_switcher_toggle {
border-color: var(--monitor-portal-color);
}
/*tabs
*/
.customTabs.uk-tab > li > a, .customTabs.uk-tab > li.uk-active > a,.customTabs.uk-tab > li > a:focus, .customTabs.uk-tab > li > a:hover {
border: 0 transparent !important;
}
.customTabs.uk-tab > li.uk-active > a,.customTabs.uk-tab > li > a:focus, .customTabs.uk-tab > li > a:hover {
color: var(--secondary-color) !important
}
.customTabs >li a{
font-size: 14px;
text-transform: capitalize;
}
.subCategoriesTabs >li a{
font-size: 13px;
text-transform: capitalize;
}
.customTabs > li.uk-active a {
font-weight:bold;
}
.uk-tab.customTabs::before {
border-bottom: none !important;
}
/*dashboard tabs*/
.customTabs.uk-tab.admin > li.uk-active > a .title {
color: var(--primary-color) !important;
border-bottom: 3.5px solid var(--portal-main-color);
}
.customTabs.uk-tab.admin > li > a:hover .uk-icon, .uk-nav-default > li > a:hover .uk-icon{
color: #646464 !important;
}
.customTabs.uk-tab.admin > li:not(.uk-active) > a.title:focus, .customTabs.uk-tab.admin > li:not(.uk-active) > a:hover,
uk-nav-default > li:not(.uk-active) > a.title:focus, .uk-nav-default > li:not(.uk-active) > a:hover{
color: var(--secondary-color) !important
}
.uk-subnav-pill.subCategoriesTabs.admin > li.uk-active > a{
border: 1px solid var(--primary-color);
background-color: var(--primary-color);
}
/* Section Tools*/
.dashboard .section {
@ -257,40 +211,23 @@ uk-nav-default > li:not(.uk-active) > a.title:focus, .uk-nav-default > li:not(.u
height: 250px;
}
li.selectedVisibility::before a, li.selectedVisibility a::before, li.selectedVisibility::after a, li.selectedVisibility a, .selectedVisibility{
background-color:var(--secondary-color);
background:blue;
opacity: 0.5;
}
li.selectedVisibility{
position: relative;
}
li.selectedVisibility::before {
content: "";
width: 100%;
height: 100%;
position: absolute;
left: 0;
background-color: var(--secondary-color);
opacity: 0.3;
}
.uk-modal .large-modal {
width: 800px;
}
.tm-header .uk-navbar-container{
background-color: var(--background-color) !important;
box-shadow: none !important;
}
.visibilityMenuIcon{
.visibility {
border-right: 1px solid var(--secondary-color);
border-bottom: 1px solid var(--secondary-color);
padding: 0px 2px 3px 0px;
padding: 10px 8px;
margin-right: 4px;
color: rgba(var(--text-color), 0.5);
}
.visibility.small {
padding: 3px 2px;
}
.descriptionIcon{
position: absolute;
bottom: 3px;