Project

General

Profile

« Previous | Next » 

Revision 60004

[Monitor Dashboard | Trunk]: Some UI changes

View differences:

modules/uoa-monitor-portal/trunk/monitor_dashboard/src/app/app.component.html
17 17
    ></dashboard-sidebar>
18 18
    <dashboard-sidebar *ngIf="hasAdminMenu" [items]="adminMenuItems" headerName="Admin"
19 19
                       headerDashboard="Administration Panel" [headerUrl]="'https://' + (properties.environment == 'beta' ? 'beta.' : '') +
20
                       'monitor.openaire.eu'"
20
                       'monitor.openaire.eu'" headerPosition="right"
21 21
                       [specialMenuItem]="specialSideBarMenuItem"
22 22
    ></dashboard-sidebar>
23 23
    <router-outlet></router-outlet>
modules/uoa-monitor-portal/trunk/monitor_dashboard/src/app/monitor/monitor.component.css
1
.uk-card {
2
  min-height: 270px;
3
}
modules/uoa-monitor-portal/trunk/monitor_dashboard/src/app/monitor/monitor.component.html
76 76
  </div>
77 77
  <div inner>
78 78
    <div [class.uk-padding]="!isSmallScreen" class="uk-padding-remove-vertical">
79
      <div *ngIf="privateStakeholder">
80
        <div class="uk-text-center uk-height-medium">
79
      <div *ngIf="privateStakeholder" class="message">
80
        <div class="uk-text-center">
81 81
          <h3><i>
82 82
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black" width="24px" height="24px">
83 83
              <path d="M0 0h24v24H0z" fill="none"/>
......
91 91
        </div>
92 92
      </div>
93 93
      <div *ngIf="!privateStakeholder">
94
        <div
95
            *ngIf="(activeSubCategory && (activeSubCategory.charts.length == 0 ||
96
          (activeSubCategory.charts.length == 1 && activeSubCategory.charts[0].indicators.length == 0)))
94
        <div *ngIf="(activeSubCategory && (activeSubCategory.charts.length == 0 ||
95
          (activeSubCategory.charts.length == 1 && countIndicatorsToShow(activeSubCategory.charts[0].indicators) == 0)))
97 96
          &&  ((activeSubCategory &&
98 97
        activeSubCategory.description &&
99 98
        activeSubCategory.description.length > 0) ||
100 99
          (activeCategory && activeCategory.description && activeCategory.description.length > 0) ||
101 100
          (activeTopic && activeTopic.description && activeTopic.description.length > 0))"
102
            class="uk-text-center">
101
             class="uk-text-center">
103 102
          <div class="uk-height-small uk-margin-large-top uk-margin-xlarge-right  uk-margin-xlarge-left">
104 103
            {{activeSubCategory && activeSubCategory.description && activeSubCategory.description.length > 0 ? activeSubCategory.description
105 104
              : (activeCategory && activeCategory.description && activeCategory.description.length > 0 ? activeCategory.description :
......
107 106
          </div>
108 107

  
109 108
        </div>
110
        <div *ngIf="!loading && !privateStakeholder &&
109
        <ng-template [ngIf]="!loading && !privateStakeholder &&
111 110
                    (!activeSubCategory ||
112 111
                    (
113
                      (activeSubCategory.numbers.length == 0 || (activeSubCategory.numbers.length == 1 && activeSubCategory.numbers[0].indicators.length == 0))
112
                      (activeSubCategory.numbers.length == 0 || (activeSubCategory.numbers.length == 1 && countIndicatorsToShow(activeSubCategory.numbers[0].indicators) == 0))
114 113
                      &&
115
                      (activeSubCategory.charts.length == 0 || (activeSubCategory.charts.length == 1 && activeSubCategory.charts[0].indicators.length == 0))
116
                    ) || !activeTopic || !activeCategory || !activeSubCategory)">
117
          <div class=" uk-text-center">
114
                      (activeSubCategory.charts.length == 0 || (activeSubCategory.charts.length == 1 && countIndicatorsToShow(activeSubCategory.charts[0].indicators) == 0))
115
                    ) || !activeTopic || !activeCategory || !activeSubCategory)" [ngIfElse]="content">
116
          <div class="message uk-text-center">
118 117
            <h3>
119 118
              No indicators available yet. Stay tuned!
120 119
            </h3>
121 120
          </div>
122
        </div>
123
        <div *ngIf="activeSubCategory" class="uk-grid uk-grid-medium uk-margin-bottom uk-margin-top"
124
             uk-height-match="target: div.uk-card">
125
          <ng-template ngFor [ngForOf]="activeSubCategory.numbers" let-number let-i="index">
126
            <h4 *ngIf="countIndicatorsToShow(number.indicators)> 0 " class="uk-width-1-1">{{number.title}}</h4>
127
            <ng-template ngFor [ngForOf]="number.indicators" let-indicator let-j="index">
128
              <div *ngIf="isPublicOrIsMember(indicator.visibility)"
129
                   [class.uk-width-1-3@m]="indicator.width === 'small'"
130
                   [class.uk-width-1-2@m]="indicator.width === 'medium'"
131
                   [class.uk-width-1-1]="indicator.width === 'large'" class=" uk-margin-bottom">
132
                <div class="uk-card uk-card-default"
133
                     [class.uk-disabled]="indicator.indicatorPaths[0].filtersApplied < countSelectedFilters()"
134
                     [class.semiFiltered]="indicator.indicatorPaths[0].filtersApplied < countSelectedFilters()">
135
                  <div class="uk-card-body uk-text-center">
136
                    <div *ngIf="properties.environment == 'development'">Filtered:
137
                      {{indicator.indicatorPaths[0].filtersApplied}}
138
                      out of
139
                      {{countSelectedFilters()}}</div>
140
                    <div class="uk-text-bold ">{{indicator.name}}</div>
141
                    <h3 *ngIf="numberResults.get(i + '-' + j)" class="uk-margin-medium-top uk-text-bold">
142
                      <span>{{numberResults.get(i + '-' + j) | number}}</span>
143
                    </h3>
144
                    <ng-container *ngTemplateOutlet="description; context: {indicator:indicator}"></ng-container>
121
        </ng-template>
122
        <ng-template #content>
123
          <div class="uk-grid uk-grid-small uk-margin-bottom uk-margin-top"
124
               uk-height-match="target: .uk-card">
125
            <ng-template ngFor [ngForOf]="activeSubCategory.numbers" let-number let-i="index">
126
              <h5 *ngIf="countIndicatorsToShow(number.indicators)> 0 "
127
                  class="uk-width-1-1 uk-margin-bottom">{{number.title}}</h5>
128
              <ng-template ngFor [ngForOf]="number.indicators" let-indicator let-j="index">
129
                <div *ngIf="isPublicOrIsMember(indicator.visibility)"
130
                     [ngClass]="getNumberClassBySize(indicator.width)" class=" uk-margin-bottom">
131
                  <div class="uk-card uk-card-default"
132
                       [class.uk-disabled]="indicator.indicatorPaths[0].filtersApplied < countSelectedFilters()"
133
                       [class.semiFiltered]="indicator.indicatorPaths[0].filtersApplied < countSelectedFilters()">
134
                    <div class="uk-card-body uk-text-center">
135
                      <div *ngIf="properties.environment == 'development'">Filtered:
136
                        {{indicator.indicatorPaths[0].filtersApplied}}
137
                        out of
138
                        {{countSelectedFilters()}}</div>
139
                      <div class="uk-text-bold ">{{indicator.name}}</div>
140
                      <h3 *ngIf="numberResults.get(i + '-' + j)" class="uk-margin-medium-top uk-text-bold">
141
                        <span>{{numberResults.get(i + '-' + j) | number}}</span>
142
                      </h3>
143
                      <!--<ng-container *ngTemplateOutlet="description; context: {indicator:indicator}"></ng-container>-->
144
                    </div>
145 145
                  </div>
146 146
                </div>
147
              </div>
147
              </ng-template>
148 148
            </ng-template>
149
          </ng-template>
150
        </div>
151
        <div *ngIf="activeSubCategory">
152
          <div *ngFor="let chart of activeSubCategory.charts; let i = index;"
153
               class="uk-grid uk-grid-medium uk-margin-bottom uk-flex uk-flex-middle "
154
               uk-height-match="target: div > div > div > div > .chartTitle">
155

  
156
            <h3 *ngIf="chart.title && chart.title.length > 0 && countIndicatorsToShow(chart.indicators) > 0 "
157
                class="uk-width-1-1 uk-margin-top">{{chart.title}}</h3>
158
            <ng-template ngFor [ngForOf]="chart.indicators" let-indicator let-j="index">
159
              <div
160
                  *ngIf="isPublicOrIsMember(indicator.visibility) && chartsActiveType.get(i + '-' + j)"
161
                  [class.uk-width-1-3@m]="indicator.width === 'small'"
162
                  [class.uk-width-1-2@m]="indicator.width === 'medium'"
163
                  [class.uk-width-1-1]="indicator.width === 'large'" class="uk-margin-bottom">
164
                <div class="indicatorBox">
149
          </div>
150
          <div>
151
            <div *ngFor="let chart of activeSubCategory.charts; let i = index;"
152
                 class="uk-grid uk-grid-small uk-margin-bottom uk-flex uk-flex-middle "
153
                 uk-height-match="target: .uk-card">
154
              <h5 *ngIf="chart.title && chart.title.length > 0 && countIndicatorsToShow(chart.indicators) > 0 "
155
                  class="uk-width-1-1 uk-margin-bottom">{{chart.title}}</h5>
156
              <ng-template ngFor [ngForOf]="chart.indicators" let-indicator let-j="index">
157
                <div
158
                    *ngIf="isPublicOrIsMember(indicator.visibility) && chartsActiveType.get(i + '-' + j)"
159
                    [ngClass]="getChartClassBySize(indicator.width)" class="uk-margin-bottom">
165 160
                  <div class="uk-card uk-card-default"
166 161
                       [class.uk-disabled]="chartsActiveType.get(i + '-' + j).filtersApplied < countSelectedFilters()"
167
                       [class.semiFiltered]="chartsActiveType.get(i + '-' + j).filtersApplied < countSelectedFilters()"
168
                  >
162
                       [class.semiFiltered]="chartsActiveType.get(i + '-' + j).filtersApplied < countSelectedFilters()">
169 163
                    <div class="uk-card-body uk-text-center">
170 164
                      <h4 class="uk-margin-bottom chartTitle uk-flex uk-flex-bottom ">
171 165
                        <div>{{indicator.name + " "}}</div>
......
191 185
                           [src]="chartsActiveType.get(i + '-' + j).safeResourceUrl"
192 186
                           [class]="' uk-width-1-1 uk-height-' +
193 187
                        (indicator.height?indicator.height.toLowerCase():'medium')">
194
                      <ng-container *ngTemplateOutlet="description; context: {indicator:indicator}"></ng-container>
188
                      <!--<ng-container *ngTemplateOutlet="description; context: {indicator:indicator}"></ng-container>-->
195 189
                    </div>
196 190
                  </div>
197 191
                </div>
198
              </div>
199
            </ng-template>
192
              </ng-template>
193
            </div>
200 194
          </div>
201
        </div>
202
        <div *ngIf="!loading && !privateStakeholder && (activeSubCategory || (activeTopic &&
203
        (activeTopic.categories == null || activeTopic.categories.length == 0)))" class="uk-margin-small-top uk-flex">
204
          <!-- Last Stats Date-->
205
          <div class="uk-width-2-3@m uk-width-1-2">
206
            <img src="assets/common-assets/graph.svg" style="opacity: 0.4">
207
            <span class="uk-margin-small-left uk-text-baseline uk-text-muted">Powered by <a href="https://graph.openaire.eu" class="graph-color">OpenAIRE Research Graph</a></span>
208
            <span *ngIf="statsUpdateDate" class="uk-text-baseline uk-text-muted">
195
          <div class="uk-margin-medium-top uk-flex">
196
            <!-- Last Stats Date-->
197
            <div class="uk-width-2-3@m uk-width-1-2">
198
              <img src="assets/common-assets/graph.svg" style="opacity: 0.4">
199
              <span class="uk-margin-small-left uk-text-baseline uk-text-muted">Powered by <a
200
                  href="https://graph.openaire.eu" class="graph-color">OpenAIRE Research Graph</a></span>
201
              <span *ngIf="statsUpdateDate" class="uk-text-baseline uk-text-muted">
209 202
                . Last update of statistics in OpenAIRE: {{statsUpdateDate | date: 'MMM dd, yyyy'}}
210 203
              </span>
204
            </div>
205
            <!--Feedback-->
206
            <div class="uk-width-expand uk-text-right">
207
              <span class="uk-text-muted">Send us your <a [href]="mailText" target="_self"
208
                                                          (click)="mailMe()">feedback</a>.</span>
209
            </div>
211 210
          </div>
212
          <!--Feedback-->
213
          <div class="uk-width-expand uk-text-right">
214
            <span class="uk-text-muted">Send us your <a [href]="mailText" target="_self" (click)="mailMe()">feedback</a>.</span>
215
          </div>
216
        </div>
211
        </ng-template>
217 212
      </div>
218 213
    </div>
219 214
  </div>
modules/uoa-monitor-portal/trunk/monitor_dashboard/src/app/monitor/monitor.component.ts
12 12
import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service";
13 13
import {
14 14
  Category, Indicator,
15
  IndicatorPath,
15
  IndicatorPath, IndicatorSize,
16 16
  Stakeholder,
17 17
  SubCategory,
18 18
  Topic,
......
525 525
  mailMe() {
526 526
    window.location.href = this.mailText;
527 527
  }
528
  
529
  public getNumberClassBySize(size: IndicatorSize) {
530
    if(size === 'small') {
531
      return 'uk-width-1-4@xl uk-width-1-3@l uk-width-1-2@m uk-width-1-1';
532
    } else if(size === 'medium') {
533
      return 'uk-width-1-3@l uk-width-1-2@m uk-width-1-1';
534
    } else {
535
      return 'uk-width-1-2@l uk-width-1-1@m uk-width-1-1';
536
    }
537
  }
538
  
539
  public getChartClassBySize(size: IndicatorSize) {
540
    if(size === 'small') {
541
      return 'uk-width-1-3@xl uk-width-1-2@m uk-width-1-1';
542
    } else if(size === 'medium') {
543
      return 'uk-width-1-2@l uk-width-1-1';
544
    } else {
545
      return 'uk-width-1-1';
546
    }
547
  }
528 548
}
modules/uoa-monitor-portal/trunk/monitor_dashboard/src/app/utils/indicator-utils.ts
171 171
  basicChartTypes:IndicatorPathType[] =["pie", "line", "column", "bar"];
172 172
  defaultChartType:IndicatorPathType = "other";
173 173
  indicatorSizes: Option[] = [
174
    {value: 'small', label: 'Small'},
174
    {value: 'small', label: 'Small(Enabled only for large screens)'},
175 175
    {value: 'medium', label: 'Medium'},
176 176
    {value: 'large', label: 'Large'}
177 177
  ];
modules/uoa-monitor-portal/trunk/monitor_dashboard/src/app/manageStakeholders/manageStakeholders.component.ts
203 203
      this.index = (this.stakeholder) ? this.stakeholders.findIndex(value => value._id === this.stakeholder._id) : -1;
204 204
    }
205 205
    this.subscriptions.push(this.stakeholderService.deleteElement(this.properties.monitorServiceAPIURL, [this.stakeholder._id]).subscribe(() => {
206
      UIkit.notification(this.stakeholder.name+ ' has been successfully deleted', {
206
      UIkit.notification(this.stakeholder.name+ ' has been <b>successfully deleted</b>', {
207 207
        status: 'success',
208
        timeout: 3000,
209
        pos: 'top-left'
208
        timeout: 6000,
209
        pos: 'bottom-right'
210 210
      });
211 211
      if (!this.stakeholder.defaultId) {
212 212
        this.defaultStakeholders.splice(this.index, 1);
......
216 216
    }, error => {
217 217
      UIkit.notification('An error has occurred. Please try again later', {
218 218
        status: 'danger',
219
        timeout: 3000,
220
        pos: 'top-left'
219
        timeout: 6000,
220
        pos: 'bottom-right'
221 221
      });
222 222
    }));
223 223
  }
......
228 228
    ];
229 229
    this.subscriptions.push(this.stakeholderService.changeVisibility(this.properties.monitorServiceAPIURL, path, visibility).subscribe(visibility => {
230 230
      stakeholder.visibility = visibility;
231
      UIkit.notification(stakeholder.name+ '\'s status has been successfully changed to ' + stakeholder.visibility.toLowerCase(), {
231
      UIkit.notification(stakeholder.name+ '\'s status has been <b>successfully changed</b> to ' + stakeholder.visibility.toLowerCase(), {
232 232
        status: 'success',
233
        timeout: 3000,
234
        pos: 'top-left'
233
        timeout: 6000,
234
        pos: 'bottom-right'
235 235
      });
236 236
    }, error => {
237 237
      UIkit.notification('An error has occurred. Please try again later', {
238 238
        status: 'danger',
239
        timeout: 3000,
240
        pos: 'top-left'
239
        timeout: 6000,
240
        pos: 'bottom-right'
241 241
      });
242 242
    }));
243 243
  }
modules/uoa-monitor-portal/trunk/monitor_dashboard/src/app/general/edit-stakeholder/edit-stakeholder.component.ts
269 269
      this.removePhoto();
270 270
      this.subscriptions.push(this.stakeholderService.buildStakeholder(this.properties.monitorServiceAPIURL,
271 271
        this.stakeholderFb.value).subscribe(stakeholder => {
272
        UIkit.notification(stakeholder.name + '\'s has been successfully created', {
272
        UIkit.notification(stakeholder.name + '\'s has been <b>successfully created</b>', {
273 273
          status: 'success',
274
          timeout: 3000,
275
          pos: 'top-left'
274
          timeout: 6000,
275
        pos: 'bottom-right'
276 276
        });
277 277
        callback(stakeholder);
278 278
      }, error => {
279 279
        UIkit.notification('An error has occurred. Please try again later', {
280 280
          status: 'danger',
281
          timeout: 3000,
282
          pos: 'top-left'
281
          timeout: 6000,
282
        pos: 'bottom-right'
283 283
        });
284 284
        if (errorCallback) {
285 285
          errorCallback(error)
......
292 292
      this.stakeholderFb.get('index_name').enable();
293 293
      this.stakeholderFb.get('index_shortName').enable();
294 294
      this.subscriptions.push(this.stakeholderService.saveElement(this.properties.monitorServiceAPIURL, this.stakeholderFb.value).subscribe(stakeholder => {
295
        UIkit.notification(stakeholder.name + '\'s has been successfully saved', {
295
        UIkit.notification(stakeholder.name + '\'s has been <b>successfully saved</b>', {
296 296
          status: 'success',
297
          timeout: 3000,
298
          pos: 'top-left'
297
          timeout: 6000,
298
        pos: 'bottom-right'
299 299
        });
300 300
        callback(stakeholder);
301 301
      }, error => {
302 302
        UIkit.notification('An error has occurred. Please try again later', {
303 303
          status: 'danger',
304
          timeout: 3000,
305
          pos: 'top-left'
304
          timeout: 6000,
305
        pos: 'bottom-right'
306 306
        });
307 307
      }));
308 308
    }
modules/uoa-monitor-portal/trunk/monitor_dashboard/src/app/topic/topic.component.html
54 54
          <li class="uk-margin-top" [class.uk-visible-toggle]="open">
55 55
            <span (click)="editTopicOpen(-1); $event.preventDefault()"
56 56
                  class="clickable uk-flex uk-flex-middle uk-flex-center">
57
              <span class="uk-icon-button small portal-icon-button" [class.uk-margin-left]="open">
57
              <span class="uk-icon-button small portal-icon-button">
58 58
                <icon name="add"></icon>
59 59
              </span>
60 60
              <span class="uk-hidden-hover space" [class.uk-hidden]="!open"> Create new topic</span>
modules/uoa-monitor-portal/trunk/monitor_dashboard/src/app/topic/indicators.component.html
43 43
        </div>
44 44
        <ng-template ngFor [ngForOf]="number.indicators" let-indicator let-j="index">
45 45
          <div *ngIf="indicator" [id]="indicator._id"
46
               [class.uk-width-1-5@m]="indicator.width === 'small'"
47
               [class.uk-width-1-3@m]=" indicator.width === 'medium'"
48
               [class.uk-width-1-2@m]=" indicator.width === 'large'"
46
               [ngClass]="getNumberClassBySize(indicator.width)"
49 47
               [class.disable-sortable]="!canReorder"
50 48
               [class.uk-sortable-nodrag]="!canReorder">
51 49
            <div class="uk-card uk-card-default uk-card-body uk-position-relative" [class.uk-card-hover]="canReorder">
......
81 79
                <h3 *ngIf="numberResults.get(i + '-' + j)" class="uk-margin-medium-top uk-text-center uk-text-bold">
82 80
                  <span>{{numberResults.get(i + '-' + j) | number}}</span>
83 81
                </h3>
84
                <ng-container *ngTemplateOutlet="description; context: {indicator:indicator}"></ng-container>
82
                <!--<ng-container *ngTemplateOutlet="description; context: {indicator:indicator}"></ng-container>-->
85 83
              </div>
86 84
            </div>
87 85
          </div>
88 86
        </ng-template>
89 87
        <div class="disable-sortable uk-sortable-nodrag uk-width-1-1">
90
          <div class="uk-width-1-3@l uk-width-1-2@m uk-width-1-1 uk-card uk-card-default uk-card-body clickable"
91
               (click)="editNumberIndicatorOpen(number)">
92
            <div>
93
              <h5 class="uk-text-bold">
94
                Create a new number Indicator
95
              </h5>
96
              <div class="uk-flex uk-flex-center uk-text-secondary uk-margin-large">
97
                <icon name="add" ratio="5"></icon>
88
          <div class="uk-grid uk-grid-small" uk-grid>
89
            <div class="uk-width-1-4@xl uk-width-1-3@l uk-width-1-2@m uk-width-1-1">
90
              <div class="uk-card uk-card-default uk-card-body clickable" (click)="editNumberIndicatorOpen(number)">
91
                <h5 class="uk-text-bold">
92
                  Create a new number Indicator
93
                </h5>
94
                <div class="uk-flex uk-flex-center uk-text-secondary uk-margin-medium-top">
95
                  <icon name="add" ratio="5"></icon>
96
                </div>
98 97
              </div>
99 98
            </div>
100 99
          </div>
......
147 146
        </div>
148 147
        <ng-template ngFor [ngForOf]="chart.indicators" let-indicator let-j="index">
149 148
          <div *ngIf="indicator" [id]="indicator._id"
150
               [class.uk-width-1-3@m]="indicator.width === 'small'"
151
               [class.uk-width-1-2@m]=" indicator.width === 'medium'"
152
               [class.uk-width-1-1@m]="indicator.width === 'large'"
149
               [ngClass]="getChartClassBySize(indicator.width)"
153 150
               [class.disable-sortable]="!canReorder"
154 151
               [class.uk-sortable-nodrag]="!canReorder">
155 152
            <div class="uk-card uk-card-default uk-card-body uk-position-relative" [class.uk-card-hover]="canReorder">
......
185 182
                <iframe *ngIf="indicator.indicatorPaths[0] && indicator.indicatorPaths[0].source !== 'image' &&
186 183
                                  safeUrls.get(indicatorUtils.getFullUrl(stakeholder, indicator.indicatorPaths[0]))"
187 184
                        [src]="safeUrls.get(indicatorUtils.getFullUrl(stakeholder, indicator.indicatorPaths[0]))"
188
                         [class]="' uk-width-1-1 uk-height-' +
185
                        [class]="' uk-width-1-1 uk-height-' +
189 186
                        (indicator.height?indicator.height.toLowerCase():'medium')"></iframe>
190 187
                <!--                    <div>Uncomment for iframes preview</div>-->
191 188
                <div *ngIf="indicator.indicatorPaths[0] && indicator.indicatorPaths[0].source === 'image'">
192 189
                  <img [class]="' uk-width-1-1 uk-height-' +
193
                        (indicator.height?indicator.height.toLowerCase():'medium')" [src]="indicator.indicatorPaths[0].url">
190
                        (indicator.height?indicator.height.toLowerCase():'medium')"
191
                       [src]="indicator.indicatorPaths[0].url">
194 192
                </div>
195
                <ng-container *ngTemplateOutlet="description; context: {indicator:indicator}"></ng-container>
193
                <!--<ng-container *ngTemplateOutlet="description; context: {indicator:indicator}"></ng-container>-->
196 194
              </div>
197 195
            </div>
198 196
          </div>
199 197
        </ng-template>
200 198
        <div class="disable-sortable uk-sortable-nodrag uk-width-1-1">
201
          <div class="uk-width-1-3@l uk-width-1-2@m uk-width-1-1 uk-card uk-card-default uk-card-body clickable"
202
               (click)="editChartIndicatorOpen(chart)">
203
            <div>
204
              <h5 class="uk-text-bold">
205
                Create a custom indicator
206
              </h5>
207
              <div class="uk-text-muted uk-text-small">
208
                Use our advance tool to create a custom Indicator that suit the needs of your funding
209
                KPI's.
199
          <div class="uk-grid uk-grid-small" uk-grid>
200
            <div class="uk-width-1-3@xl uk-width-1-2@m uk-width-1-1">
201
              <div class=" uk-card uk-card-default uk-card-body clickable" (click)="editChartIndicatorOpen(chart)">
202
                <h5 class="uk-text-bold">
203
                  Create a custom indicator
204
                </h5>
205
                <div class="uk-text-muted uk-text-small">
206
                  Use our advance tool to create a custom Indicator that suit the needs of your funding
207
                  KPI's.
208
                </div>
209
                <div class="uk-flex uk-flex-center uk-text-secondary uk-margin-medium-top">
210
                  <icon name="add" ratio="5"></icon>
211
                </div>
210 212
              </div>
211
              <div class="uk-flex uk-flex-center uk-text-secondary uk-margin-large">
212
                <icon name="add" ratio="5"></icon>
213
              </div>
214 213
            </div>
215 214
          </div>
216 215
        </div>
......
267 266
                  [class.uk-text-danger]="numberIndicatorPaths.at(i).get('result').invalid && numberIndicatorPaths.at(i).get('result').errors.required">
268 267
                <span>JSON Path</span>
269 268
              </h6>
270
              <div *ngIf="numberIndicatorPaths.at(i).get('result').invalid && numberIndicatorPaths.at(i).get('result').errors.required">
269
              <div
270
                  *ngIf="numberIndicatorPaths.at(i).get('result').invalid && numberIndicatorPaths.at(i).get('result').errors.required">
271 271
                <div class="uk-text-danger uk-text-small">
272 272
                  This JSON path is not valid or the result has not been calculated yet.
273 273
                  Please press calculate on box below to see the result.
......
302 302
            <div class="uk-width-1-1 uk-flex uk-flex-center">
303 303
              <div class="uk-flex uk-position-relative">
304 304
                <span class="uk-padding number number-preview">
305
                  <span *ngIf="numberIndicatorPaths.at(i).get('result').valid">{{numberIndicatorPaths.at(i).get('result').value | number}}</span>
305
                  <span
306
                      *ngIf="numberIndicatorPaths.at(i).get('result').valid">{{numberIndicatorPaths.at(i).get('result').value | number}}</span>
306 307
                </span>
307
                <div *ngIf="numberIndicatorPaths.at(i).get('result').invalid" class="uk-width-1-1 uk-height-1-1 refresh-indicator">
308
                <div *ngIf="numberIndicatorPaths.at(i).get('result').invalid"
309
                     class="uk-width-1-1 uk-height-1-1 refresh-indicator">
308 310
                  <div class="uk-position-relative uk-height-1-1">
309 311
                    <div class="uk-position-center uk-text-center clickable uk-text-small"
310 312
                         (click)="validateJsonPath(i)">
......
331 333
  <div *ngIf="chartIndicatorFb" class="uk-padding-small" [formGroup]="chartIndicatorFb">
332 334
    <div class="uk-grid" uk-grid>
333 335
      <div dashboard-input class="uk-width-1-1" [formInput]="chartIndicatorFb.get('name')" label="Title"></div>
334
      <div dashboard-input class="uk-width-1-1"  *ngIf="stakeholder.defaultId !=-1 && (  (indicator.description &&
336
      <div dashboard-input class="uk-width-1-1" *ngIf="stakeholder.defaultId !=-1 && (  (indicator.description &&
335 337
      indicator.description.length > 0) || !stakeholder.defaultId)"
336 338
           [formInput]="chartIndicatorFb.get('description')"
337 339
           label="Default Description" type="textarea">
modules/uoa-monitor-portal/trunk/monitor_dashboard/src/app/topic/topic.component.ts
474 474
      callback(saveElement);
475 475
      UIkit.notification(message, {
476 476
        status: 'success',
477
        timeout: 3000,
478
        pos: 'top-left'
477
        timeout: 6000,
478
        pos: 'bottom-right'
479 479
      });
480 480
      if (redirect) {
481 481
        this.router.navigate(['../' + saveElement.alias], {
......
485 485
    }, error => {
486 486
      UIkit.notification(error.error.message, {
487 487
        status: 'danger',
488
        timeout: 3000,
489
        pos: 'top-left'
488
        timeout: 6000,
489
        pos: 'bottom-right'
490 490
      });
491 491
    }));
492 492
  }
......
497 497
      this.stakeholderService.setStakeholder(this.stakeholder);
498 498
      UIkit.notification(message, {
499 499
        status: 'success',
500
        timeout: 3000,
501
        pos: 'top-left'
500
        timeout: 6000,
501
        pos: 'bottom-right'
502 502
      });
503 503
      if (redirect) {
504 504
        this.back();
......
506 506
    }, error => {
507 507
      UIkit.notification(error.error.message, {
508 508
        status: 'danger',
509
        timeout: 3000,
510
        pos: 'top-left'
509
        timeout: 6000,
510
        pos: 'bottom-right'
511 511
      });
512 512
    }));
513 513
  }
......
526 526
    this.subscriptions.push(this.stakeholderService.changeVisibility(this.properties.monitorServiceAPIURL, path, visibility).subscribe(visibility => {
527 527
      element.visibility = visibility;
528 528
      this.stakeholderService.setStakeholder(this.stakeholder);
529
      UIkit.notification(StringUtils.capitalize(this.type) + ' has been successfully changed to ' + element.visibility.toLowerCase(), {
529
      UIkit.notification(StringUtils.capitalize(this.type) + ' has been <b>successfully changed</b> to ' + element.visibility.toLowerCase(), {
530 530
        status: 'success',
531
        timeout: 3000,
532
        pos: 'top-left'
531
        timeout: 6000,
532
        pos: 'bottom-right'
533 533
      });
534 534
    }, error => {
535 535
      UIkit.notification(error.error.message, {
536 536
        status: 'danger',
537
        timeout: 3000,
538
        pos: 'top-left'
537
        timeout: 6000,
538
        pos: 'bottom-right'
539 539
      });
540 540
    }));
541 541
  }
modules/uoa-monitor-portal/trunk/monitor_dashboard/src/app/topic/indicators.component.ts
11 11
} from "@angular/core";
12 12
import {
13 13
  Indicator,
14
  IndicatorPath,
14
  IndicatorPath, IndicatorSize,
15 15
  IndicatorType,
16 16
  Section,
17 17
  Stakeholder,
......
408 408
    return this.chartIndicatorFb.get('indicatorPaths') as FormArray;
409 409
  }
410 410
  
411
  public getNumberClassBySize(size: IndicatorSize) {
412
    if(size === 'small') {
413
      return 'uk-width-1-4@xl uk-width-1-3@l uk-width-1-2@m uk-width-1-1';
414
    } else if(size === 'medium') {
415
      return 'uk-width-1-3@l uk-width-1-2@m uk-width-1-1';
416
    } else {
417
      return 'uk-width-1-2@l uk-width-1-1@m uk-width-1-1';
418
    }
419
  }
420
  
421
  public getChartClassBySize(size: IndicatorSize) {
422
    if(size === 'small') {
423
      return 'uk-width-1-3@xl uk-width-1-2@m uk-width-1-1';
424
    } else if(size === 'medium') {
425
      return 'uk-width-1-2@l uk-width-1-1';
426
    } else {
427
      return 'uk-width-1-1';
428
    }
429
  }
430
  
411 431
  public addJsonPath(index: number) {
412 432
    if (index == 0 && this.getJsonPath(index).getRawValue()[index].indexOf(",") != -1) {
413 433
      //if in the first path there are more than one paaths comma separated, split them and autogenerate the forms
......
792 812
        this.filterNumbers();
793 813
        this.numberIndicatorFb = null;
794 814
      }
795
      UIkit.notification('Indicator has been successfully saved', {
815
      UIkit.notification('Indicator has been <b>successfully saved</b>', {
796 816
        status: 'success',
797
        timeout: 3000,
798
        pos: 'top-left'
817
        timeout: 6000,
818
        pos: 'bottom-right'
799 819
      });
800 820
      this.editing = false;
801 821
    }, error => {
802 822
      this.chartIndicatorFb = null;
803 823
      UIkit.notification(error.error.message, {
804 824
        status: 'danger',
805
        timeout: 3000,
806
        pos: 'top-left'
825
        timeout: 6000,
826
        pos: 'bottom-right'
807 827
      });
808 828
      this.editing = false;
809 829
    }));
......
894 914
        this.numbers.find(section => section._id === this.section._id).indicators.splice(this.index, 1);
895 915
        this.filterNumbers();
896 916
      }
897
      UIkit.notification('Indicator has been successfully deleted', {
917
      UIkit.notification('Indicator has been <b>successfully deleted</b>', {
898 918
        status: 'success',
899
        timeout: 3000,
900
        pos: 'top-left'
919
        timeout: 6000,
920
        pos: 'bottom-right'
901 921
      });
902 922
      this.editing = false;
903 923
    }, error => {
904 924
      UIkit.notification(error.error.message, {
905 925
        status: 'danger',
906
        timeout: 3000,
907
        pos: 'top-left'
926
        timeout: 6000,
927
        pos: 'bottom-right'
908 928
      });
909 929
      this.editing = false;
910 930
    }));
......
922 942
    ];
923 943
    this.subscriptions.push(this.stakeholderService.changeVisibility(this.properties.monitorServiceAPIURL, path, visibility).subscribe(visibility => {
924 944
      indicator.visibility = visibility;
925
      UIkit.notification('Indicator has been successfully changed to ' + indicator.visibility.toLowerCase(), {
945
      UIkit.notification('Indicator has been <b>successfully changed</b> to ' + indicator.visibility.toLowerCase(), {
926 946
        status: 'success',
927
        timeout: 3000,
928
        pos: 'top-left'
947
        timeout: 6000,
948
        pos: 'bottom-right'
929 949
      });
930 950
      this.editing = false;
931 951
    }, error => {
932 952
      UIkit.notification('An error has been occurred. Try again later', {
933 953
        status: 'danger',
934
        timeout: 3000,
935
        pos: 'top-left'
954
        timeout: 6000,
955
        pos: 'bottom-right'
936 956
      });
937 957
      this.editing = false;
938 958
    }));
......
950 970
    ];
951 971
    this.stakeholderService.toggleAccess(this.properties.monitorServiceAPIURL, path).subscribe(visibility => {
952 972
      indicator.visibility = visibility;
953
      UIkit.notification('Indicator has been successfully changed to ' + (visibility?'public':'private'), {
973
      UIkit.notification('Indicator has been <b>successfully changed</b> to ' + (visibility?'public':'private'), {
954 974
        status: 'success',
955
        timeout: 3000,
956
        pos: 'top-left'
975
        timeout: 6000,
976
        pos: 'bottom-right'
957 977
      });
958 978
      this.editing = false;
959 979
    }, error => {
960 980
      UIkit.notification(error.error.message, {
961 981
        status: 'danger',
962
        timeout: 3000,
963
        pos: 'top-left'
982
        timeout: 6000,
983
        pos: 'bottom-right'
964 984
      });
965 985
      this.editing = false;
966 986
    });
......
983 1003
        this.filterNumbers();
984 1004
      }
985 1005
      this.initReorder();
986
      UIkit.notification('Section has been successfully saved', {
1006
      UIkit.notification('Section has been <b>successfully saved</b>', {
987 1007
        status: 'success',
988
        timeout: 3000,
989
        pos: 'top-left'
1008
        timeout: 6000,
1009
        pos: 'bottom-right'
990 1010
      });
991 1011
      this.editing = false;
992 1012
    }, error => {
993 1013
      UIkit.notification(error.error.message, {
994 1014
        status: 'danger',
995
        timeout: 3000,
996
        pos: 'top-left'
1015
        timeout: 6000,
1016
        pos: 'bottom-right'
997 1017
      });
998 1018
      this.editing = false;
999 1019
    }));
......
1025 1045
        this.filterNumbers();
1026 1046
      }
1027 1047
      this.initReorder();
1028
      UIkit.notification('Section has been successfully created', {
1048
      UIkit.notification('Section has been <b>successfully created</b>', {
1029 1049
        status: 'success',
1030
        timeout: 3000,
1031
        pos: 'top-left'
1050
        timeout: 6000,
1051
        pos: 'bottom-right'
1032 1052
      });
1033 1053
      this.editing = false;
1034 1054
    }, error => {
1035 1055
      UIkit.notification(error.error.message, {
1036 1056
        status: 'danger',
1037
        timeout: 3000,
1038
        pos: 'top-left'
1057
        timeout: 6000,
1058
        pos: 'bottom-right'
1039 1059
      });
1040 1060
      this.editing = false;
1041 1061
    }));
......
1096 1116
        this.filterNumbers();
1097 1117
      }
1098 1118
      this.initReorder();
1099
      UIkit.notification('Section has been successfully deleted', {
1119
      UIkit.notification('Section has been <b>successfully deleted</b>', {
1100 1120
        status: 'success',
1101
        timeout: 3000,
1102
        pos: 'top-left'
1121
        timeout: 6000,
1122
        pos: 'bottom-right'
1103 1123
      });
1104 1124
      this.editing = false;
1105 1125
    }, error => {
1106 1126
      UIkit.notification(error.error.message, {
1107 1127
        status: 'danger',
1108
        timeout: 3000,
1109
        pos: 'top-left'
1128
        timeout: 6000,
1129
        pos: 'bottom-right'
1110 1130
      });
1111 1131
      this.editing = false;
1112 1132
    }));
modules/uoa-monitor-portal/trunk/monitor_dashboard/src/assets/dashboard-theme/tabs-pills.css
14 14

  
15 15
.uk-subnav-pill > * > :first-child {
16 16
  text-transform: none;
17
  font-size: 13px;
17
  font-size: var(--sidebar-font-size);
18 18
  color: var(--text-color);
19 19
}
20 20

  
......
35 35

  
36 36
.uk-tab > li > a {
37 37
  color: rgb(var(--text-color-rgb), 0.5) !important;
38
  font-size: var(--small-font-size);
39 38
  font-family: "Open Sans", sans-serif !important;
40 39
  text-transform: capitalize;
41 40
}
42 41

  
42
.uk-tab > li > * {
43
  font-size: var(--small-font-size);
44
}
45

  
43 46
.uk-tab > li:hover > a {
44 47
  color: var(--secondary-color) !important;
45 48
}
modules/uoa-monitor-portal/trunk/monitor_dashboard/src/assets/dashboard-theme/structure.css
50 50
  padding: 5px 0;
51 51
}
52 52

  
53
#sidebar_main .menu_section ul:not(.uk-dropdown-nav) > li > a, #sidebar_main .special_section ul:not(.uk-dropdown-nav) > li > a {
53
#sidebar_main .menu_section ul:not(.uk-dropdown-nav) > li > *,
54
#sidebar_main .special_section ul:not(.uk-dropdown-nav) > li > a {
55
  font-size: var(--sidebar-font-size);
56
}
57

  
58
#sidebar_main .menu_section ul:not(.uk-dropdown-nav) > li > a,
59
#sidebar_main .special_section ul:not(.uk-dropdown-nav) > li > a {
54 60
  display: block;
55
  font-size: var(--sidebar-font-size);
56 61
  color: rgba(var(--text-color-rgb), 0.5);
57 62
}
58 63

  
......
85 90
  transition-property: left;
86 91
}
87 92

  
88
.sidebar_main_swipe #page_content, .sidebar_main_swipe openaire-user  > user > *,
93
.sidebar_main_swipe #page_content,
94
.sidebar_main_swipe openaire-user  > user > *,
89 95
.sidebar_main_swipe openaire-error  > * {
90 96
  padding-left: var(--sidebar-width);
91 97
  padding-top: var(--header-height);
......
96 102
  -o-transition: 0.5s;
97 103
}
98 104

  
105
.sidebar_main_swipe #page_content .message {
106
  padding-left: var(--sidebar-width);
107
}
108

  
99 109
.sidebar_main_swipe bottom > * {
100 110
  padding-left: var(--sidebar-width);
101 111
  transition: 0.5s;
......
124 134

  
125 135
/*Sidebar mini*/
126 136
.sidebar_main_swipe.sidebar_mini #page_content,
137
.sidebar_main_swipe.sidebar_mini #page_content .message,
127 138
.sidebar_main_swipe.sidebar_mini openaire-user > user > *,
128 139
.sidebar_main_swipe.sidebar_mini openaire-error  > *,
129 140
.sidebar_main_swipe.sidebar_mini bottom > * {
......
144 155
}
145 156

  
146 157
#page_content {
147
  min-height: calc(100vh - var(--header-height));
158
  min-height: calc(70vh - var(--header-height));
148 159
  background-color: var(--background-color);
160
  position: relative;
149 161
}
150 162

  
163
#page_content .message {
164
  top: 50%;
165
  left: 50%;
166
  transform: translate(-50%, -50%);
167
  position: absolute;
168
}
169

  
151 170
#page_content_header {
152 171
  position: fixed;
153 172
  background: var(--background-color);

Also available in: Unified diff