Project

General

Profile

1
<div *ngIf="stakeholder && canEdit">
2
  <div class="uk-text-right uk-width-expand">
3
    <button class="uk-margin-bottom uk-margin-right uk-button uk-button-primary" (click)="export_indicators()">
4
      <span class="uk-text-small">Export</span>
5
    </button>
6
    <div uk-form-custom class="js-upload">
7
      <input id="exampleInputFile" type="file" class="uk-width-medium" (change)="fileChangeEvent($event)"/>
8
      <button class="uk-button uk-button-primary uk-margin-bottom">Import (JSON file) </button>
9
    </div>
10
  </div>
11

    
12
  <div *ngIf="numberSections">
13
    <h6 class="uk-text-bold">Number Indicators</h6>
14
    <ng-template ngFor [ngForOf]="displayNumbers" let-number let-i="index">
15
      <div [id]="'number-' + number._id"
16
           class="uk-grid-match  uk-grid-small uk-grid uk-margin-top section"
17
           uk-sortable="group: number" uk-grid>
18
        <div class="tools disable-sortable uk-sortable-nodrag">
19
          <div class="actions">
20
            <a [class.uk-disabled]="editing" class="" (click)="createSection(i, 'number')"
21
               title="Create a new section">
22
              <icon name="add"></icon>
23
            </a>
24
            <!--<button class="md-btn md-btn-mini"><i class="material-icons rotate-90">drag_indicator</i></button>-->
25
            <a [title]="(number.defaultId?'Default sections cannot be deleted':'Delete section')"
26
               (click)="deleteSectionOpen(number, i, 'number', 'delete')">
27
              <icon name="close"></icon>
28
            </a>
29
            <!--              <ng-container *ngIf="!stakeholder.defaultId">-->
30
            <!--                <button   [disabled]="editing || number.defaultId  " class="md-btn md-btn-mini"-->
31
            <!--                          [title]="(number.defaultId?'Default sections cannot be deleted':'Delete all related sections')"-->
32
            <!--                          (click)="deleteSectionOpen(number, i, 'number', 'delete')"><i class="material-icons">highlight_off</i>-->
33
            <!--                </button>-->
34
            <!--                <button   [disabled]="editing || number.defaultId  " class="md-btn md-btn-mini"-->
35
            <!--                          [title]="(number.defaultId?'Default sections cannot be deleted':'Delete section and disconnect related')"-->
36
            <!--                          (click)="deleteSectionOpen(number, i, 'number', 'disconnect')"><i class="material-icons">link_off</i>-->
37
            <!--                </button>-->
38
            <!--              </ng-container>-->
39
          </div>
40
        </div>
41
        <div *ngIf="numberSections.at(i)"
42
             class="uk-width-1-1 uk-margin-medium-bottom disable-sortable uk-sortable-nodrag">
43
          <div dashboard-input [formInput]="numberSections.at(i).get('title')"
44
               [extraLeft]="false" class="uk-width-1-3@m uk-width-1-1" placeholder="Title"
45
               inputClass="input-borderless uk-h5 uk-margin-remove">
46
            <div [class.uk-invisible]="numberSections.at(i).get('title').pristine">
47
              <button class="uk-button uk-button-secondary" [disabled]="editing"
48
                      (click)="saveSection(numberSections.at(i).value, i, 'number')">
49
                Save
50
              </button>
51
            </div>
52
          </div>
53
        </div>
54
        <ng-template ngFor [ngForOf]="number.indicators" let-indicator let-j="index">
55
          <div *ngIf="indicator" [id]="indicator._id"
56
               [ngClass]="getNumberClassBySize(indicator.width)"
57
               [class.disable-sortable]="!canReorder"
58
               [class.uk-sortable-nodrag]="!canReorder">
59
            <div class="uk-card uk-card-default uk-card-body uk-position-relative" [class.uk-card-hover]="canReorder">
60
              <ng-container
61
                  *ngTemplateOutlet="visibilityOptions; context:{indicator: indicator, sectionId: number._id}"></ng-container>
62
              <div class="uk-position-top-right uk-margin-small-right uk-margin-small-top clickable">
63
                <i uk-icon="more-vertical" (click)="$event.stopPropagation();$event.preventDefault()"></i>
64
                <div #element uk-dropdown="mode: click; pos: bottom-right; delay-hide: 0; flip: false">
65
                  <ul class="uk-nav uk-dropdown-nav">
66
                    <li *ngIf="!editing"><a
67
                        (click)="editNumberIndicatorOpen(number, indicator._id)">Edit</a></li>
68
                    <ng-template ngFor [ngForOf]="stakeholderUtils.visibility" let-v>
69
                      <li *ngIf="indicator.visibility != v.value"><a (click)="changeIndicatorStatus(number._id,
70
                           indicator, v.value); hide(element)">
71
                        {{'Make ' + v.label.toLowerCase()}}</a>
72
                      </li>
73
                    </ng-template>
74
                    <hr *ngIf="!indicator.defaultId" class="uk-nav-divider">
75
                    <li *ngIf="!indicator.defaultId && !editing"><a
76
                        (click)="deleteIndicatorOpen(number, indicator._id, 'number', 'delete');hide(element)">Delete</a>
77
                      <!--                            <ng-container *ngIf="!stakeholder.defaultId">-->
78
                      <!--                              <a (click)="deleteIndicatorOpen(number, indicator._id, 'number', 'delete');hide(element)">Delete from all profiles</a>-->
79
                      <!--                              <a (click)="deleteIndicatorOpen(number, indicator._id, 'number', 'disconnect');hide(element)">Delete and disconnect from all profiles</a>-->
80
                      <!--                            </ng-container>-->
81
                    </li>
82
                  </ul>
83
                </div>
84
              </div>
85
              <div>
86
                <div class="uk-text-center uk-text-bold">
87
                  {{indicator.name ? indicator.name : 'No title available'}}
88
                </div>
89
                <h3 class="uk-margin-medium-top uk-text-center uk-text-bold">
90
                  <span *ngIf="numberResults.get(i + '-' + j)">{{numberResults.get(i + '-' + j) | number}}</span>
91
                  <span *ngIf="!numberResults.get(i + '-' + j)">--</span>
92
                </h3>
93
                <!--<ng-container *ngTemplateOutlet="description; context: {indicator:indicator}"></ng-container>-->
94
              </div>
95
            </div>
96
          </div>
97
        </ng-template>
98
        <div class="disable-sortable uk-sortable-nodrag uk-width-1-1">
99
          <div class="uk-grid uk-grid-small" uk-grid>
100
            <div class="uk-width-1-4@xl uk-width-1-3@l uk-width-1-2@m uk-width-1-1">
101
              <div class="uk-card uk-card-default uk-card-body clickable" (click)="editNumberIndicatorOpen(number)">
102
                <h5 class="uk-text-bold">
103
                  Create a new number Indicator
104
                </h5>
105
                <div class="uk-flex uk-flex-center uk-text-secondary uk-margin-large-top">
106
                  <icon name="add" ratio="5"></icon>
107
                </div>
108
              </div>
109
            </div>
110
          </div>
111
        </div>
112
      </div>
113
    </ng-template>
114
    <ng-container *ngTemplateOutlet="new_section; context:{type: 'number'}"></ng-container>
115
  </div>
116
  <div *ngIf="chartSections" class="uk-margin-large-top">
117
    <h6 class="uk-text-bold">Chart Indicators</h6>
118
    <ng-template ngFor [ngForOf]="displayCharts" let-chart let-i="index">
119
      <div [id]="'chart-' + chart._id"
120
           class="uk-grid-match section uk-grid-small uk-grid uk-margin-top"
121
           uk-sortable="group: chart" uk-grid>
122
        <div class="tools disable-sortable uk-sortable-nodrag">
123
          <div class="actions">
124
            <a [class.uk-disabled]="editing" class="" (click)="createSection(i)"
125
               title="Create a new section">
126
              <icon name="add"></icon>
127
            </a>
128
            <!--<button class="md-btn md-btn-mini"><i class="material-icons rotate-90">drag_indicator</i></button>-->
129
            <a [title]="(chart.defaultId?'Default sections cannot be deleted':'Delete section')"
130
               (click)="deleteSectionOpen(chart, i, 'chart', 'delete')">
131
              <icon name="close"></icon>
132
            </a>
133
            <!--              <ng-container *ngIf="!stakeholder.defaultId">-->
134
            <!--                <button   [disabled]="editing || chart.defaultId  " class="md-btn md-btn-mini"-->
135
            <!--                          [title]="(chart.defaultId?'Default sections cannot be deleted':'Delete all related sections')"-->
136
            <!--                          (click)="deleteSectionOpen(chart, i, 'chart', 'delete')"><i class="material-icons">highlight_off</i>-->
137
            <!--                </button>-->
138
            <!--                <button   [disabled]="editing || chart.defaultId  " class="md-btn md-btn-mini"-->
139
            <!--                          [title]="(chart.defaultId?'Default sections cannot be deleted':'Delete section and disconnect related')"-->
140
            <!--                          (click)="deleteSectionOpen(chart, i, 'chart', 'disconnect')"><i class="material-icons">link_off</i>-->
141
            <!--                </button>-->
142
            <!--              </ng-container>-->
143
          </div>
144
        </div>
145
        <div *ngIf="chartSections.at(i)"
146
             class="uk-width-1-1 uk-margin-medium-bottom disable-sortable uk-sortable-nodrag">
147
          <div dashboard-input [formInput]="chartSections.at(i).get('title')"
148
               [extraLeft]="false" class="uk-width-1-3@m uk-width-1-1" placeholder="Title"
149
               inputClass="input-borderless uk-h5 uk-margin-remove">
150
            <div [class.uk-invisible]="chartSections.at(i).get('title').pristine">
151
              <button class="uk-button uk-button-secondary" [disabled]="editing"
152
                      (click)="saveSection(chartSections.at(i).value, i)">
153
                Save
154
              </button>
155
            </div>
156
          </div>
157
        </div>
158
        <ng-template ngFor [ngForOf]="chart.indicators" let-indicator let-j="index">
159
          <div *ngIf="indicator" [id]="indicator._id"
160
               [ngClass]="getChartClassBySize(indicator.width)"
161
               [class.disable-sortable]="!canReorder"
162
               [class.uk-sortable-nodrag]="!canReorder">
163
            <div class="uk-card uk-card-default uk-card-body uk-position-relative" [class.uk-card-hover]="canReorder">
164
              <ng-container
165
                  *ngTemplateOutlet="visibilityOptions; context:{indicator: indicator, sectionId: chart._id}"></ng-container>
166
              <div class="uk-position-top-right uk-margin-small-right uk-margin-small-top clickable">
167
                <i uk-icon="more-vertical" (click)="$event.stopPropagation();$event.preventDefault()"></i>
168
                <div #element uk-dropdown="mode: click; pos: bottom-right; delay-hide: 0; flip: false">
169
                  <ul class="uk-nav uk-dropdown-nav">
170
                    <li *ngIf="!editing"><a
171
                        (click)="editChartIndicatorOpen(chart, indicator._id);hide(element)">Edit</a>
172
                    </li>
173
                    <ng-template ngFor [ngForOf]="stakeholderUtils.visibility" let-v>
174
                      <li *ngIf="indicator.visibility != v.value"><a (click)="changeIndicatorStatus(chart._id,
175
                             indicator, v.value); hide(element)">
176
                        {{'Make ' + v.label.toLowerCase()}}</a>
177
                      </li>
178
                    </ng-template>
179
                    <hr *ngIf="!indicator.defaultId " class="uk-nav-divider">
180
                    <li *ngIf="!editing && !indicator.defaultId "><a
181
                        (click)="deleteIndicatorOpen(chart, indicator._id, 'chart', 'delete');hide(element)">
182
                      Delete</a>
183
                      <!--                            <a (click)="deleteIndicatorOpen(chart, indicator._id, 'chart', 'delete');hide(element)">Delete from all profiles</a>-->
184
                      <!--                            <a (click)="deleteIndicatorOpen(chart, indicator._id, 'chart', 'disconnect');hide(element)">Delete and disconnect from all profiles</a>-->
185
                    </li>
186
                  </ul>
187
                </div>
188
              </div>
189
              <div>
190
                <div *ngIf="indicator.name" class="uk-text-center uk-text-bold uk-margin-small-bottom">
191
                  {{indicator.name}}
192
                </div>
193
                <iframe *ngIf="!properties.disableFrameLoad && indicator.indicatorPaths[0] &&
194
                indicator.indicatorPaths[0].source !==
195
                'image' &&
196
                                  safeUrls.get(indicatorUtils.getFullUrl(stakeholder, indicator.indicatorPaths[0]))"
197
                        [src]="safeUrls.get(indicatorUtils.getFullUrl(stakeholder, indicator.indicatorPaths[0]))"
198
                        [class]="' uk-width-1-1 uk-height-' +
199
                        (indicator.height?indicator.height.toLowerCase():'medium')"></iframe>
200
                <div *ngIf="properties.disableFrameLoad &&
201
                indicator.indicatorPaths[0].source !==
202
                'image'" class="uk-alert uk-alert-danger uk-text-center">I frames
203
                  preview is disabled
204
                </div>
205
                <div *ngIf="indicator.indicatorPaths[0] && indicator.indicatorPaths[0].source === 'image'">
206
                  <img [class]="' uk-width-1-1 uk-height-' +
207
                        (indicator.height?indicator.height.toLowerCase():'medium')"
208
                       [src]="indicator.indicatorPaths[0].url">
209
                </div>
210
                <!--<ng-container *ngTemplateOutlet="description; context: {indicator:indicator}"></ng-container>-->
211
              </div>
212
            </div>
213
          </div>
214
        </ng-template>
215
        <div class="disable-sortable uk-sortable-nodrag uk-width-1-1">
216
          <div class="uk-grid uk-grid-small" uk-grid>
217
            <div class="uk-width-1-3@xl uk-width-1-2@m uk-width-1-1">
218
              <div class=" uk-card uk-card-default uk-card-body clickable" (click)="editChartIndicatorOpen(chart)">
219
                <h5 class="uk-text-bold">
220
                  Create a custom indicator
221
                </h5>
222
                <div class="uk-text-muted uk-text-small">
223
                  Use our advance tool to create a custom Indicator that suit the needs of your funding
224
                  KPI's.
225
                </div>
226
                <div class="uk-flex uk-flex-center uk-text-secondary uk-margin-medium-top">
227
                  <icon name="add" ratio="5"></icon>
228
                </div>
229
              </div>
230
            </div>
231
          </div>
232
        </div>
233
      </div>
234
    </ng-template>
235
    <ng-container *ngTemplateOutlet="new_section; context:{type: 'chart'}"></ng-container>
236
  </div>
237
</div>
238

    
239
<modal-alert #editNumberModal
240
             [large]="true"
241
             (alertOutput)="saveIndicator()"
242
             [okDisabled]="numberIndicatorFb && (numberIndicatorFb.invalid || numberIndicatorFb.pristine)">
243
  <div class="uk-padding-small">
244
    <div *ngIf="numberIndicatorFb" class="uk-grid" [formGroup]="numberIndicatorFb" uk-grid>
245
      <div dashboard-input class="uk-width-1-1" [formInput]="numberIndicatorFb.get('name')" placeholder="Write a title"
246
           label="Title"></div>
247
      <div dashboard-input class="uk-width-1-1" *ngIf="stakeholder.defaultId !=-1 && (  (indicator.description &&
248
      indicator.description.length > 0) || !stakeholder.defaultId)"
249
           [formInput]="numberIndicatorFb.get('description')"
250
           placeholder="Write a description"
251
           label="Profile description" type="textarea">
252
      </div>
253
      <div dashboard-input class="uk-width-1-1" *ngIf="stakeholder.defaultId"
254
           [formInput]="numberIndicatorFb.get('additionalDescription')"
255
           placeholder="Write a description"
256
           label="Description" type="textarea">
257
      </div>
258
      <div dashboard-input class="uk-width-1-2@m" [formInput]="numberIndicatorFb.get('visibility')"
259
           placeholder="Select a status"
260
           label="Visibility" [options]="stakeholderUtils.visibility" type="select">
261
      </div>
262
      <div dashboard-input class="uk-width-1-2@m" [formInput]="numberIndicatorFb.get('width')"
263
           type="select" [options]="indicatorUtils.indicatorSizes"
264
           placeholder="Select a size" label="Number Size">
265
      </div>
266
      <div *ngIf="numberIndicatorPaths" formArrayName="indicatorPaths">
267
        <div *ngFor="let indicatorPath of numberIndicatorPaths.controls; let i=index"
268
             [formGroup]="indicatorPath">
269
          <div class="uk-grid" uk-grid>
270
            <div class="uk-width-1-1">
271
              <div class="uk-grid" uk-grid>
272
                <div class="uk-width-1-1">
273
                  <div dashboard-input [formInput]="indicatorPath.get('url')" label="Number URL"
274
                       placeholder="Write a URL">
275
                    <div *ngIf="urlParameterizedMessage" warning>{{urlParameterizedMessage}}</div>
276
                  </div>
277
                </div>
278
                <div *ngIf="showCheckForSchemaEnhancements" class=" uk-width-1-1 ">
279
                  <div class="uk-alert uk-alert-warning">
280
                    There are schema enchancements that can be applied in this query. <a
281
                      (click)="indicatorPath.get('url').setValue(indicatorUtils.applySchemaEnhancements(indicatorPath.get('url').value)); indicatorPath.get('url').markAsDirty()">Apply
282
                    now</a>
283
                  </div>
284
                </div>
285
                <div class="uk-width-1-1">
286
                  <div dashboard-input [formInput]="indicatorPath.get('source')" label="Source"
287
                       type="select" placeholder="Select a source"
288
                       [options]="isAdministrator?indicatorUtils.allSourceTypes:indicatorUtils.sourceTypes">
289
                  </div>
290
                </div>
291
              </div>
292
            </div>
293
            <div formArrayName="jsonPath" class="uk-width-1-1">
294
              <h6 class="uk-text-bold uk-flex uk-flex-middle uk-margin-remove-bottom">
295
                <span>JSON Path</span>
296
              </h6>
297
              <div
298
                  *ngIf="numberIndicatorPaths.at(i).get('result').invalid && numberIndicatorPaths.at(i).get('result').errors.required">
299
                <div class="uk-text-danger uk-text-small">
300
                  This JSON path is not valid or the result has not been calculated yet.
301
                  Please press calculate on box below to see the result.
302
                </div>
303
              </div>
304
              <div class="uk-grid uk-child-width-1-3@m uk-child-width-1-1 uk-margin-top" uk-grid>
305
                <div *ngFor="let jsonPath of getJsonPath(i).controls; let j=index" class="uk-flex uk-flex-middle">
306
                  <div dashboard-input class="uk-width-1-1"
307
                       [extraLeft]="false"
308
                       [formInput]="jsonPath"
309
                       placeholder="Write a field"
310
                       [label]="'Level ' + +(j + 1)">
311
                    <div class="uk-flex uk-flex-middle">
312
                    <span *ngIf="getJsonPath(i).length !== 1"
313
                          [class.uk-hidden]="numberIndicatorFb.get('defaultId').value"
314
                          class="uk-margin-small-left uk-text-danger clickable"
315
                          [class.uk-disabled]="getJsonPath(i).disabled"
316
                          (click)="removeJsonPath(i, j)">
317
                      <icon name="close"></icon>
318
                    </span>
319
                      <span class="uk-text-center uk-margin-left">
320
                      <icon *ngIf="indicator.defaultId === null || j < (getJsonPath(i).controls.length - 1)"
321
                            name="arrow_right"></icon>
322
                    </span>
323
                    </div>
324
                  </div>
325
                </div>
326
                <div *ngIf="indicator.defaultId === null" class="uk-flex uk-flex-middle">
327
                  <button class="uk-icon-button uk-button-secondary uk-margin-medium-top"
328
                          (click)="addJsonPath(i)">
329
                    <icon name="add"></icon>
330
                  </button>
331
                </div>
332
              </div>
333
            </div>
334
            <div class="uk-width-1-1 uk-flex uk-flex-center">
335
              <div class="uk-flex uk-position-relative">
336
                <span class="uk-padding number number-preview uk-text-center">
337
                  <span
338
                      *ngIf="numberIndicatorPaths.at(i).get('result').valid && numberIndicatorPaths.at(i).get('result').value !== 0">
339
                    {{numberIndicatorPaths.at(i).get('result').value | number}}
340
                  </span>
341
                  <span
342
                      *ngIf="numberIndicatorPaths.at(i).get('result').valid && numberIndicatorPaths.at(i).get('result').value === 0">
343
                    --
344
                  </span>
345
                </span>
346
                <div *ngIf="numberIndicatorPaths.at(i).get('result').invalid"
347
                     class="uk-width-1-1 uk-height-1-1 refresh-indicator">
348
                  <div class="uk-position-relative uk-height-1-1">
349
                    <div class="uk-position-center uk-text-center clickable uk-text-small"
350
                         [class.uk-disabled]="numberIndicatorPaths.at(i).get('url').invalid"
351
                         (click)="validateJsonPath(i, true)">
352
                      <div>
353
                        <icon name="refresh"></icon>
354
                      </div>
355
                      <span *ngIf="numberIndicatorPaths.at(i).get('result').errors.required">Calculate</span>
356
                      <span *ngIf="numberIndicatorPaths.at(i).get('result').errors.validating">Calculating...</span>
357
                    </div>
358
                  </div>
359
                </div>
360
              </div>
361
            </div>
362
          </div>
363
        </div>
364
      </div>
365
    </div>
366
    <div #editNumberNotify notify-form class="uk-width-1-1 uk-margin-medium-top"
367
         [class.uk-hidden]="properties.environment === 'production'"></div>
368
  </div>
369
</modal-alert>
370
<modal-alert #editChartModal
371
             [large]="true"
372
             (alertOutput)="saveIndicator()"
373
             [okDisabled]="chartIndicatorFb && (chartIndicatorFb.invalid || chartIndicatorFb.pristine)">
374
  <div class="uk-padding-small">
375
    <div *ngIf="chartIndicatorFb" [formGroup]="chartIndicatorFb" class="uk-grid" uk-grid>
376
      <div dashboard-input class="uk-width-1-1" [formInput]="chartIndicatorFb.get('name')" placeholder="Write a title"
377
           label="Title"></div>
378
      <div dashboard-input class="uk-width-1-1" *ngIf="stakeholder.defaultId !=-1 && (  (indicator.description &&
379
      indicator.description.length > 0) || !stakeholder.defaultId)"
380
           [formInput]="chartIndicatorFb.get('description')" placeholder="Write a description"
381
           label="Default Description" type="textarea">
382
      </div>
383
      <div dashboard-input *ngIf="stakeholder.defaultId" class="uk-width-1-1"
384
           [formInput]="chartIndicatorFb.get('additionalDescription')" placeholder="Write a default description"
385
           label="Description" type="textarea">
386
      </div>
387
      <div dashboard-input class="uk-width-1-2@m" [formInput]="chartIndicatorFb.get('visibility')"
388
           placeholder="Select a status"
389
           label="Status" [options]="stakeholderUtils.visibility" type="select">
390
      </div>
391
      <div dashboard-input class="uk-width-1-2@m" [formInput]="chartIndicatorFb.get('width')"
392
           type="select" [options]="indicatorUtils.indicatorSizes" placeholder="Select a size"
393
           label="Chart width">
394
      </div>
395
      <div dashboard-input class="uk-width-1-2@m" [formInput]="chartIndicatorFb.get('height')"
396
           type="select" [options]="indicatorUtils.indicatorSizes" placeholder="Select a size"
397
           label="Chart height">
398
      </div>
399
      <div *ngIf="chartIndicatorPaths" formArrayName="indicatorPaths" class="uk-width-1-1">
400
        <div *ngFor="let indicatorPath of chartIndicatorPaths.controls; let  i=index;"
401
             [formGroup]="indicatorPath" class="uk-grid" uk-grid>
402
          <div dashboard-input class="uk-width-1-1"
403
               [title]="indicatorPath.get('url').disabled?'Default chart URLs cannot change':''"
404
               [formInput]="indicatorPath.get('url')" placeholder="Write a URL" label="Chart URL">
405
            <div *ngIf="urlParameterizedMessage" warning>{{urlParameterizedMessage}}</div>
406
          </div>
407
          <div *ngIf="showCheckForSchemaEnhancements" class=" uk-width-1-1 ">
408
            <div class="uk-alert uk-alert-warning">
409
              There are schema enchancements that can be applied in this query. <a
410
                (click)="indicatorPath.get('url').setValue(indicatorUtils.applySchemaEnhancements(indicatorPath.get('url').value)); indicatorPath.get('url').markAsDirty()">Apply
411
              now</a>
412
            </div>
413
          </div>
414
          <div class="uk-width-1-1" formArrayName="parameters">
415
            <div class="uk-grid" uk-grid>
416
              <div *ngIf="getParameter(i, 'title')" class="uk-width-1-1">
417
                <div dashboard-input
418
                     [formInput]="getParameter(i, 'title').get('value')"
419
                     placeholder="Write a title"
420
                     label="Chart Title"></div>
421
              </div>
422
              <div *ngIf="getParameter(i, 'subtitle')" class="uk-width-1-1">
423
                <div dashboard-input placeholder="Write a subtitle"
424
                     [formInput]="getParameter(i, 'subtitle').get('value')"
425
                     label="Chart Subtitle"></div>
426
              </div>
427
              <div *ngIf="!getParameter(i, 'type')" class="uk-width-1-3@s">
428
                <div dashboard-input [formInput]="indicatorPath.get('type')"
429
                     type="select" placeholder="Select a type"
430
                     [options]="(indicatorPath.get('type').value == 'table' && getParameter(i, 'data_title_0'))?indicatorUtils.getChartTypes(indicatorPath.get('type').value):indicatorUtils.allChartTypes"
431
                     label="Chart Type"></div>
432
              </div>
433
              <div *ngIf="getParameter(i, 'type')" class="uk-width-1-3@s">
434
                <div dashboard-input [formInput]="getParameter(i, 'type').get('value')"
435
                     placeholder="Select a type"
436
                     type="select" [options]="indicatorUtils.getChartTypes(getParameter(i, 'type').get('value').value)"
437
                     label="Chart Type"></div>
438
              </div>
439
              <div *ngIf="getParameter(i, 'xAxisTitle')" class="uk-width-1-3@s">
440
                <div dashboard-input [formInput]="getParameter(i, 'xAxisTitle').get('value')"
441
                     placeholder="Write a title for X-Axis"
442
                     label="X-Axis Title"></div>
443
              </div>
444
              <div *ngIf="getParameter(i, 'yAxisTitle')" class="uk-width-1-3@s">
445
                <div dashboard-input [formInput]="getParameter(i, 'yAxisTitle').get('value')"
446
                     placeholder="Write a title"
447
                     label="Y-Axis Title"></div>
448
              </div>
449
              <div *ngIf="getParameter(i, 'data_title_0')" class="uk-width-1-3@s">
450
                <div dashboard-input [formInput]="getParameter(i, 'data_title_0').get('value')"
451
                     placeholder="Write a title"
452
                     label="Data title"></div>
453
              </div>
454
              <div *ngIf="getParameter(i, 'data_title_1')" class="uk-width-1-3@s">
455
                <div dashboard-input [formInput]="getParameter(i, 'data_title_1').get('value')"
456
                     placeholder="Write a title"
457
                     label="Data title"></div>
458
              </div>
459
              <div *ngIf="getParameter(i, 'start_year')" class="uk-width-1-3@s">
460
                <div dashboard-input [formInput]="getParameter(i, 'start_year').get('value')"
461
                     placeholder="Write a year"
462
                     label="Year (From)"></div>
463
              </div>
464
              <div *ngIf="getParameter(i, 'end_year')" class="uk-width-1-3@s">
465
                <div dashboard-input [formInput]="getParameter(i, 'end_year').get('value')"
466
                     placeholder="Write a year"
467
                     label="Year (To)"></div>
468
              </div>
469
            </div>
470
          </div>
471
          <div *ngIf="indicator && indicator.indicatorPaths[i] && indicator.indicatorPaths[i].safeResourceUrl"
472
               class="uk-margin-medium-top uk-position-relative uk-width-1-1 uk-flex uk-flex-center">
473
            <div *ngIf="(hasDifference(i)) && !indicatorPath.invalid"
474
                 class="uk-width-1-1 uk-height-large refresh-indicator">
475
              <div class="uk-position-relative uk-height-1-1">
476
                <div class="uk-position-center uk-text-center clickable"
477
                     (click)="refreshIndicator()">
478
                  <div>
479
                    <icon name="refresh"></icon>
480
                  </div>
481
                  <span>Click to refresh the graph view</span>
482
                </div>
483
              </div>
484
            </div>
485
            <iframe *ngIf="indicator.indicatorPaths[i].source !== 'image'"
486
                    [src]="indicator.indicatorPaths[i].safeResourceUrl"
487
                    class="uk-width-1-1 uk-height-large"></iframe>
488
            <!--            <div *ngIf="properties.disableFrameLoad  && indicator.indicatorPaths[i].source !== 'image'" class="uk-alert uk-alert-danger uk-text-center">I frames-->
489
            <!--              preview is disabled</div>-->
490
            <div *ngIf="indicator.indicatorPaths[i].source === 'image'">
491
              <img class="uk-width-1-1 uk-height-large" [src]="indicator.indicatorPaths[i].url">
492
            </div>
493
          </div>
494
        </div>
495
      </div>
496
    </div>
497
    <div #editChartNotify notify-form class="uk-width-1-1 uk-margin-medium-top"
498
         [class.uk-hidden]="properties.environment === 'production'"></div>
499
  </div>
500
</modal-alert>
501
<modal-alert #deleteModal (alertOutput)="deleteIndicator()">
502
  You are about to delete <span class="uk-text-bold" *ngIf="indicator && index !== -1">
503
  "{{indicator.name ? indicator.name : indicator.indicatorPaths[0].parameters.title}}"</span> indicator permanently.
504
  <div *ngIf="indicatorChildrenActionOnDelete == 'delete'" class="uk-text-bold">
505
    Indicators of all profiles based on this default indicator, will be deleted as well.
506
  </div>
507
  <!--  <span *ngIf="indicatorChildrenActionOnDelete == 'disconnect'" class="uk-text-bold">-->
508
  <!--    Indicators of all profiles based on this default indicator, will not be marked as copied from default anymore.-->
509
  <!--  </span>-->
510
  Are you sure you want to proceed?
511
  <div #deleteNotify notify-form class="uk-width-1-1 uk-margin-medium-top"
512
       [class.uk-hidden]="properties.environment === 'production'"></div>
513
</modal-alert>
514
<!--<modal-alert #deleteAllModal (alertOutput)="deleteIndicator('delete')">
515
  You are about to delete <span class="uk-text-bold" *ngIf="indicator && index !== -1">
516
  "{{indicator.name ? indicator.name : indicator.indicatorPaths[0].parameters.title}}"</span> indicator permanently.
517
  <span class="uk-text-bold">Indicators of all profiles based on this default indicator, will be deleted as well.</span>
518
  Are you sure you want to proceed?
519
</modal-alert>
520
<modal-alert #deleteAndDisconnectModal (alertOutput)="deleteIndicator('disconnect')">
521
  You are about to delete <span class="uk-text-bold" *ngIf="indicator && index !== -1">
522
  "{{indicator.name ? indicator.name : indicator.indicatorPaths[0].parameters.title}}"</span> indicator permanently.
523
  <span class="uk-text-bold">Indicators of all profiles based on this default indicator, will not be marked as copied from default anymore.</span>
524
  Are you sure you want to proceed?
525
</modal-alert>-->
526
<modal-alert #deleteSectionModal (alertOutput)="deleteSection()">
527
  You are about to delete this section and its indicators permanently.
528
  <div *ngIf="sectionChildrenActionOnDelete == 'delete' && !stakeholder.defaultId" class="uk-text-bold">
529
    Sections of all profiles based on this default section and their contents, will be deleted as well.
530
  </div>
531
  <!--  <span *ngIf="sectionChildrenActionOnDelete == 'disconnect'" class="uk-text-bold">-->
532
  <!--    Sections of all profiles based on this default section and their contents, will not be marked as copied from default anymore.-->
533
  <!--  </span>-->
534
  Are you sure you want to proceed?
535
</modal-alert>
536
<!--<modal-alert #deleteNumberSectionModal (alertOutput)="deleteSection('number')">
537
  You are about to delete this section and its indicators permanently.
538
  Are you sure you want to proceed?
539
</modal-alert>
540
<modal-alert #deleteChartSectionModal (alertOutput)="deleteSection()">
541
  You are about to delete this section and its indicators permanently.
542
  Are you sure you want to proceed?
543
</modal-alert>-->
544
<ng-template #visibilityOptions let-indicator="indicator" let-sectionId="sectionId">
545
   <span class="uk-position-top-left uk-margin-small-left uk-margin-small-top clickable visibility">
546
      <span class="clickable color">
547
          <icon [name]="stakeholderUtils.visibilityIcon.get(indicator.visibility)"></icon>
548
        </span>
549
      <div #element uk-dropdown="mode: click; pos: bottom-left; delay-hide: 0; flip: false">
550
        <ul class="uk-nav uk-dropdown-nav">
551
          <li *ngFor="let v of stakeholderUtils.visibility" class="uk-position-relative">
552
            <a *ngIf="indicator.visibility != v.value"
553
               (click)="$event.stopPropagation();changeIndicatorStatus(sectionId, indicator,v.value);hide(element);$event.preventDefault()">
554
                <icon [name]="stakeholderUtils.visibilityIcon.get(v.value)" ratio="0.8"></icon>
555
                <span> {{v.label}}</span>
556
            </a>
557
            <a *ngIf="indicator.visibility == v.value">
558
              <icon [name]="stakeholderUtils.visibilityIcon.get(v.value)" [ratio]="0.8"></icon>
559
              <span> {{v.label}}</span>
560
              <span class="uk-position-center-right">
561
                <icon customClass="uk-text-secondary" [ratio]="0.5" name="bullet"></icon>
562
              </span>
563
            </a>
564
          </li>
565
        </ul>
566
      </div>
567
   </span>
568
</ng-template>
569
<ng-template #new_section let-type="type">
570
  <div class="new-section uk-margin-large-top">
571
    <div class="tools uk-flex uk-flex-middle clickable" (click)="createSection(-1, type)">
572
      <button class="uk-margin-small-right uk-icon-button uk-button-secondary">
573
        <icon name="add" [ratio]="1.5"></icon>
574
      </button>
575
      <span>Create a new section</span>
576
    </div>
577
  </div>
578
</ng-template>
579
<ng-template #description let-indicator="indicator">
580
<span class="descriptionIcon"
581
      *ngIf="(indicator.description && indicator.description.length > 0)
582
                       || (indicator.additionalDescription && indicator.additionalDescription.length > 0)"
583
      uk-icon="info"
584
      [attr.uk-tooltip]="'title:<div class=\'uk-padding-small\'>'+
585
  (indicator.description&& indicator.description.length > 0?indicator.description:'') +'<br>'+
586
(indicator.additionalDescription && indicator.additionalDescription.length?indicator.additionalDescription:'')
587
  +'</div>'">
588
  </span>
589
</ng-template>
(2-2/7)