@kigi/components 1.41.0-alpha.10 → 1.41.0-alpha.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kigi/components",
3
- "version": "1.41.0-alpha.10",
3
+ "version": "1.41.0-alpha.12",
4
4
  "description": "@kigi/components",
5
5
  "main": "src/components/index.ts",
6
6
  "scripts": {
@@ -1,3 +1,21 @@
1
- <div>
2
- aaaaaaaaaaaaaa
1
+ <div class="average-customer-time-wrapper">
2
+ <figure class="highcharts-figure">
3
+ <div class="description-container-dash">
4
+ <div class="mbg-h-c-tone-s-icon-dash"
5
+ ng-click="$ctrl.toggleShowValuesReturnCustomer(false)">
6
+ <i class="fa fa-lock lock-dash-store"
7
+ aria-hidden="true"
8
+ uib-tooltip="Sem permissão para visualizar"
9
+ tooltip-placement="left"
10
+ ng-if="$ctrl.isBlockValuesDashboarReturnCustomer && !$ctrl.hideValue"></i>
11
+ <i ng-if="!$ctrl.hideValue && $ctrl.isPermissionAverageCustomerReturnTime"
12
+ disable-animate
13
+ class="far fa-eye eye-board-target"></i>
14
+ <i ng-if="$ctrl.hideValue && $ctrl.isPermissionAverageCustomerReturnTime"
15
+ disable-animate
16
+ class="far fa-eye-slash eye-board-target"></i>
17
+ </div>
18
+ </div>
19
+ <div id="container"></div>
20
+ </figure>
3
21
  </div>
@@ -1,301 +1,172 @@
1
- .store-goal-wrapper {
1
+ .average-customer-time-wrapper {}
2
2
 
3
- .swiper {
4
- width: 100%;
5
- height: 100%;
6
- overflow: hidden;
7
- }
8
-
9
- .swiper-wrapper {
10
- display: flex;
11
- transition: transform 0.3s ease;
12
- }
13
-
14
- .swiper-slide {
15
- width: 100%;
16
- flex-shrink: 0;
17
- display: flex;
18
- justify-content: center;
19
- align-items: center;
20
- box-sizing: border-box;
21
- }
22
-
23
- .swiper-slide-active {
24
- display: flex;
25
- justify-content: center;
26
- align-items: center;
27
- }
28
-
29
- .swiper-pagination {
30
- position: absolute;
31
- top: 100px;
32
- left: 54%;
33
- transform: translateX(-50%);
34
- display: flex;
35
- gap: 5px;
36
- }
37
-
38
- .swiper-pagination-bullet {
39
- width: 10px;
40
- height: 10px;
41
- background-color: #606A90;
42
- border-radius: 50%;
43
- opacity: 0.5;
44
- }
45
-
46
- .swiper-pagination-bullet-active {
47
- background-color: #0EBCBD;
48
- opacity: 1;
49
- }
50
-
51
- .active-index {
52
- display: flex;
53
- justify-content: end;
54
- font-size: 14px;
55
- margin-top: -17px;
56
- color: var(--titleColor);
3
+ .highcharts-figure {
4
+ .custom-title-container{
5
+ .custom-title{
6
+ position: relative;
7
+ left: -20px;
57
8
  }
58
-
59
-
60
- .line-goal {
9
+ }
10
+ .line-pay {
61
11
  width: 100%;
62
12
  background: #737373;
63
13
  height: 1px;
64
14
  opacity: 0.3;
65
15
 
66
16
  }
67
-
68
- .dashboard-wrapper {
69
- overflow: hidden;
70
- display: flex;
71
- justify-content: center;
72
- align-items: center;
73
- height: 100%;
17
+ #container {
18
+ border-radius: 10px;
19
+ background: #FFF;
20
+ box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.05);
74
21
  width: 100%;
75
- position: relative;
76
- left: -22px;
77
-
78
- .dashboard-estimated {
79
-
80
- position: relative;
81
- left: 52px;
82
- top: 10px;
83
- height: 115px;
84
- font-size: 14px;
85
- color: #5f5b5b;
86
-
87
- }
88
-
89
- .dashboard-estimated-store {
90
-
91
- position: relative;
92
- top: 18px;
93
- left: 38px;
94
- height: 115px;
95
- font-size: 14px;
96
- color: #5f5b5b;
97
- }
98
- }
99
-
100
- .chart-container {
22
+ margin-left: 19px;
101
23
  display: flex;
102
24
  justify-content: center;
103
25
  align-items: center;
104
- width: 300px;
105
- height: auto;
106
- position: relative;
107
- left: 10%;
108
- bottom: 195px;
109
26
  }
110
-
111
- .opacity-dash-goal {
112
- opacity: 0.5;
113
- }
114
-
115
- .goal-target {
116
- position: relative;
117
- top: 180px;
118
- font-size: 14px;
119
- color: #5f5b5b;
120
- }
121
-
122
- .estimate-goal {
123
- font-size: 14px;
124
- color: #5f5b5b;
125
- }
126
-
127
- .estimate-goal-store {
128
- font-size: 14px;
129
- color: #5f5b5b;
130
-
131
- i {
132
- color: #0EBCBD;
133
- }
134
-
135
- .tooltip-inner {
136
- width: 250px;
137
- }
138
-
139
-
140
- .tooltip-chart-panel {
141
- display: flex;
142
- flex-direction: column;
143
- position: relative;
144
- background: #0EBCBD !important;
145
- font-weight: bold;
146
- color: #FFFFFF;
147
- width: 100%;
148
- height: 100%;
149
- margin-right: 200px;
150
- border-radius: 10px;
151
- opacity: 1.0;
152
- }
153
-
154
- }
155
- .lock-permition{
156
-
157
- .tooltip-inner {
158
- background: #0EBCBD !important;
159
- color: #000000 !important;
160
- width: 300px;
161
- }
162
- }
163
-
164
- .goal-day {
165
- display: flex;
166
- justify-content: space-between;
167
- align-items: end;
168
- position: relative;
169
- top: 170px;
170
- font-size: 16px;
171
- color: #5f5b5b;
172
- }
173
-
174
27
  .description-container-dash {
175
- flex-grow: 1;
176
28
  color: var(--titleColor);
177
29
  display: flex;
178
- justify-content: space-between;
179
- width: 100%;
180
- margin-top: 16px;
181
- font-weight: 600;
182
- font-size: 14px;
183
-
184
- .active-index-slide{
185
- position: relative;
186
- top: -11px;
187
- left: 95px;
188
- }
30
+ justify-content: end;
31
+ position: relative;
32
+ top: 22px;
33
+ right: 12px;
34
+ z-index: 9999;
189
35
 
190
36
  .mbg-h-c-tone-s-icon-dash {
191
37
  margin-top: -10px;
192
38
  transition: opacity 500ms ease;
193
39
  opacity: 0.9;
194
40
  }
41
+ }
42
+ }
43
+
44
+ @media screen and (max-width: 1920px){
45
+ .highcharts-figure {
195
46
 
196
- .lock-dash-store {
47
+ .line-pay {
197
48
  position: relative;
198
- right: -20px;
49
+ left: -20px;
50
+ width: 480px;
199
51
  }
200
-
201
- .show-tooltip {
202
- font-size: 20px;
203
- color: #5f5b5b;
204
- z-index: 9999;
52
+ #container {
53
+ border-radius: 10px;
54
+ background: #FFF;
55
+ box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.05);
56
+ width: 504px;
57
+ margin-left: 19px;
205
58
  }
59
+
206
60
  }
207
61
 
208
- @keyframes blink {
209
- 0% {
210
- opacity: 1;
211
- }
62
+ }
212
63
 
213
- 50% {
214
- opacity: 0;
64
+ @media screen and (max-width: 1728px){
65
+ .highcharts-figure {
66
+ .line-pay {
67
+ position: relative;
68
+ left: -20px;
69
+ width: 418px;
215
70
  }
216
-
217
- 100% {
218
- opacity: 1;
71
+ #container {
72
+ border-radius: 10px;
73
+ background: #FFF;
74
+ box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.05);
75
+ width: 444px;
76
+ padding: inherit;
219
77
  }
220
78
  }
79
+ }
221
80
 
222
- .description-dash {
223
- font-size: 20px;
224
- color: #5f5b5b;
225
-
226
- i {
227
- animation: blink 1s infinite;
228
- color: #ff8c00;
81
+ @media screen and (max-width: 1536px){
82
+ .highcharts-figure {
83
+ .custom-title-container{
84
+ .custom-title{
85
+ font-size: 17px;
86
+ }
87
+ }
88
+ .line-pay {
229
89
  position: relative;
230
- z-index: 9999;
90
+ left: -20px;
91
+ width: 366px;
231
92
  }
232
-
233
- .tooltip-inner {
234
- background: #ff8c00 !important;
235
- color: #000000 !important;
236
- width: 300px;
93
+ #container {
94
+ border-radius: 10px;
95
+ background: #FFF;
96
+ box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.05);
97
+ width: 390px;
237
98
  }
238
99
  }
100
+ }
239
101
 
240
- @media screen and (max-width: 1920px){
241
- .description-container-dash{
242
- .active-index-slide {
243
- left: 140px;
102
+ @media screen and (max-width: 1440px){
103
+ .highcharts-figure {
104
+ .custom-title-container{
105
+ .custom-title{
106
+ font-size: 16px;
107
+ width: 100vw;
108
+ }
244
109
  }
110
+
111
+ .line-pay {
112
+ position: relative;
113
+ left: -20px;
114
+ width: 332px;
245
115
  }
246
- }
116
+ #container {
117
+ border-radius: 10px;
118
+ background: #FFF;
119
+ box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.05);
120
+ width: 358px;
247
121
 
248
- @media screen and (max-width: 1728px){
249
- .description-container-dash{
250
- .active-index-slide {
251
- left: 108px;
252
- }
253
122
  }
254
123
  }
124
+ }
255
125
 
256
- @media screen and (max-width: 1536px){
257
- .description-container-dash{
258
- .active-index-slide {
259
- left: 70px;
260
- }
126
+ @media screen and (max-width: 1366px){
127
+ .highcharts-figure {
128
+ .custom-title-container{
129
+ .custom-title{
130
+ font-size: 16px;
131
+ width: 100vw;
261
132
  }
262
- }
263
- @media screen and (max-width: 1440px){
264
- .description-container-dash{
265
- .active-index-slide {
266
- left: 58px;
267
133
  }
134
+
135
+ .line-pay {
136
+ position: relative;
137
+ left: -20px;
138
+ width: 450px;
268
139
  }
269
- }
140
+ #container {
141
+ border-radius: 10px;
142
+ background: #FFF;
143
+ box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.05);
144
+ width: 474px;
270
145
 
271
- @media screen and (max-width: 1366px){
272
- .description-container-dash{
273
- .active-index-slide {
274
- left: 125px;
275
- }
276
146
  }
277
147
  }
148
+ }
278
149
 
279
- @media screen and (max-width: 1024px){
280
- .description-container-dash{
281
- .active-index-slide {
282
- left: 44px;
150
+ @media screen and (max-width: 1024px){
151
+ .highcharts-figure {
152
+ .custom-title-container{
153
+ .custom-title{
154
+ font-size: 15px;
155
+ width: 100vw;
156
+ }
283
157
  }
158
+
159
+ .line-pay {
160
+ position: relative;
161
+ left: -20px;
162
+ width: 306px;
284
163
  }
285
- }
286
-
287
- }
164
+ #container {
165
+ border-radius: 10px;
166
+ background: #FFF;
167
+ box-shadow: 0px 2px 20px rgba(0, 0, 0, 0.05);
168
+ width: 330px;
288
169
 
289
- .hide-goal {
290
- display: flex;
291
- justify-content: center;
292
- align-items: center;
293
- width: 100%;
294
- height: 100%;
295
- font-size: 14px;
296
- color: #5f5b5b;
170
+ }
171
+ }
297
172
  }
298
-
299
- .state-goal {
300
- cursor: pointer;
301
- }
@@ -1,7 +1,20 @@
1
1
  import './mbg-average-customer-time.scss'
2
2
  import template from './mbg-average-customer-time.html'
3
+ import Highcharts from 'highcharts'
4
+ import Exporting from 'highcharts/modules/exporting.js'
5
+ import Accessibility from 'highcharts/modules/accessibility.js'
6
+
7
+ Exporting(Highcharts)
8
+ Accessibility(Highcharts)
3
9
 
4
10
  class MbgAverageCustomerTimeController {
11
+ private percentagesReturnCustomerTime
12
+ private isPermissionAverageCustomerReturnTime
13
+ private allowedToSee: boolean
14
+ private allowedCallBack: Function
15
+ private isBlockValuesDashboarReturnCustomer
16
+ private hideValue: boolean = false
17
+
5
18
  constructor(
6
19
  public $scope,
7
20
  public $element,
@@ -11,7 +24,152 @@ class MbgAverageCustomerTimeController {
11
24
  public $state,
12
25
  ) {}
13
26
 
14
- async $onInit() {}
27
+ async $onInit() {
28
+ this.isBlockValuesDashboarReturnCustomer =
29
+ !this.allowedToSee || !this.isPermissionAverageCustomerReturnTime
30
+ this.$scope.$watch(
31
+ '$ctrl.percentagesReturnCustomerTime',
32
+ (data) => {
33
+ if (data) {
34
+ this.configPanelPercentagesReturnCustomerTime()
35
+ }
36
+ },
37
+ true,
38
+ )
39
+ }
40
+
41
+ configPanelPercentagesReturnCustomerTime() {
42
+ const colors = ['#F24A57', '#45BDBF', '#482F72', '#CDDA34', '#F68E2C']
43
+ const hasPermissionPorcentages = !this.isPermissionAverageCustomerReturnTime || this.hideValue
44
+ const transformedData = this.percentagesReturnCustomerTime.map((item, index) => ({
45
+ name: `${item.days} dias`,
46
+ y: parseFloat(item.percentage) > 0 ? parseFloat(item.percentage) : 0,
47
+ color: colors[index],
48
+ }))
49
+
50
+ Highcharts.chart('container', {
51
+ chart: {
52
+ type: 'pie',
53
+ backgroundColor: 'none',
54
+ events: {
55
+ redraw: function () {
56
+ const chart = this
57
+ const noDataText = 'Nenhum período selecionado'
58
+
59
+ if (chart.noDataLabel) {
60
+ chart.noDataLabel.destroy()
61
+ chart.noDataLabel = null
62
+ }
63
+
64
+ const allDataHidden = chart.series.filter((series) =>
65
+ series.data.filter((point) => point.options.visible),
66
+ )
67
+
68
+ const hasDate = allDataHidden[0].data.some((option) => option.visible)
69
+
70
+ if (!hasDate) {
71
+ const centerX = chart.plotWidth / 2
72
+ const centerY = chart.plotHeight / 2
73
+ chart.noDataLabel = chart.renderer
74
+ .text(noDataText, centerX, centerY)
75
+ .attr({
76
+ zIndex: 5,
77
+ align: 'center',
78
+ })
79
+ .css({
80
+ fontSize: '20px',
81
+ color: '#5f5b5b',
82
+ textAlign: 'center',
83
+ })
84
+ .add()
85
+ }
86
+ },
87
+ },
88
+ },
89
+ title: {
90
+ text: `
91
+ <div class="custom-title-container">
92
+ <p class="custom-title">Tempo médio de retorno do cliente</p>
93
+ <div class="line-pay"></div>
94
+ </div>`,
95
+ useHTML: true,
96
+ style: {
97
+ fontSize: '20px',
98
+ color: '#5f5b5b',
99
+ fontWeight: 'bold',
100
+ },
101
+ },
102
+
103
+ legend: {
104
+ layout: 'horizontal',
105
+ itemDistance: 5,
106
+ },
107
+ plotOptions: {
108
+ pie: {
109
+ allowPointSelect: true,
110
+ cursor: 'pointer',
111
+ borderRadius: 8,
112
+ dataLabels: {
113
+ enabled: !hasPermissionPorcentages,
114
+
115
+ formatter: function () {
116
+ if (!hasPermissionPorcentages) {
117
+ return `<span style="color:#7B7B7B">${
118
+ this.point.name
119
+ }</span><br><span style="font-weight:bold; color:#333">(${this.y.toFixed(
120
+ 2,
121
+ )}%)</span>`
122
+ }
123
+ },
124
+ style: {
125
+ fontSize: '0.9em',
126
+ },
127
+ },
128
+ showInLegend: true,
129
+ },
130
+ },
131
+ tooltip: {
132
+ backgroundColor: '#FFF',
133
+ formatter: function () {
134
+ if (hasPermissionPorcentages) {
135
+ return 'Sem permissão para visualizar'
136
+ }
137
+ return `<b>${this.point.name}</b><br>Porcentagem: ${this.y.toFixed(2)}%`
138
+ },
139
+ },
140
+ series: [
141
+ {
142
+ name: 'Porcentagem',
143
+ colorByPoint: true,
144
+ innerSize: '75%',
145
+ data: transformedData,
146
+ },
147
+ ],
148
+ navigation: {
149
+ buttonOptions: {
150
+ enabled: false,
151
+ },
152
+ },
153
+ credits: {
154
+ enabled: false,
155
+ },
156
+ })
157
+ }
158
+
159
+ toggleShowValuesReturnCustomer() {
160
+ if (
161
+ (this.allowedToSee !== undefined && !this.allowedToSee) ||
162
+ !this.isPermissionAverageCustomerReturnTime
163
+ ) {
164
+ if (this.allowedCallBack) {
165
+ this.allowedCallBack()
166
+ }
167
+ return
168
+ }
169
+
170
+ this.hideValue = !this.hideValue
171
+ this.configPanelPercentagesReturnCustomerTime()
172
+ }
15
173
  }
16
174
  MbgAverageCustomerTimeController['$inject'] = [
17
175
  '$scope',
@@ -23,7 +181,13 @@ MbgAverageCustomerTimeController['$inject'] = [
23
181
  ]
24
182
 
25
183
  const mbgAverageCustomerTime = {
26
- bindings: {},
184
+ bindings: {
185
+ percentagesReturnCustomerTime: '=?',
186
+ isPermissionAverageCustomerReturnTime: '=?',
187
+ allowedToSee: '=?',
188
+ allowedCallBack: '&?',
189
+ isBlockValuesDashboarReturnCustomer: '=?',
190
+ },
27
191
  template,
28
192
  controller: MbgAverageCustomerTimeController,
29
193
  }
@@ -1,9 +1,6 @@
1
1
  <div ng-class="{'opacity-dash-goal': !$ctrl.isPermissionStoreGoal}"
2
2
  class="store-goal-wrapper"
3
3
  ng-show="$ctrl.showDashboard">
4
-
5
-
6
-
7
4
  <div class="description-container-dash">
8
5
  <p class="description-dash">
9
6
  Meta do mês / {{$ctrl.currentMonthName}}
@@ -13,8 +10,6 @@
13
10
  ng-show="$ctrl.estimatedPercentageGreaterThanTarget"
14
11
  aria-hidden="true"></i>
15
12
  </p>
16
-
17
-
18
13
  <div class="mbg-h-c-tone-s-icon-dash"
19
14
  ng-click="$ctrl.toggleShowValueStoreGoal(false)">
20
15
  <i class="fa fa-lock lock-dash-store"
@@ -127,6 +122,31 @@
127
122
 
128
123
 
129
124
  <div class="swiper-pagination"></div>
125
+ <div class="loading-indicator">
126
+ <svg id="loading-circle"
127
+ width="30"
128
+ height="30"
129
+ viewBox="0 0 100 100">
130
+
131
+ <circle cx="50"
132
+ cy="50"
133
+ r="40"
134
+ stroke="#E9E9E9"
135
+ stroke-width="8"
136
+ fill="none" />
137
+
138
+ <circle id="progress"
139
+ cx="50"
140
+ cy="50"
141
+ r="40"
142
+ stroke="#0ebcbd"
143
+ stroke-width="8"
144
+ stroke-dasharray="251.2"
145
+ stroke-dashoffset="251.2"
146
+ fill="none"
147
+ transform="rotate(-90 50 50)" />
148
+ </svg>
149
+ </div>
130
150
  </div>
131
151
  </div>
132
152
  </div>
@@ -1,5 +1,18 @@
1
1
  .store-goal-wrapper {
2
2
 
3
+ .loading-indicator {
4
+ position: absolute;
5
+ top: 26%;
6
+ left: 98%;
7
+ transform: translate(-50%, -50%);
8
+ width: 40px;
9
+ height: 40px;
10
+ }
11
+
12
+ #loading-circle {
13
+ position: absolute;
14
+ }
15
+
3
16
  .swiper {
4
17
  width: 100%;
5
18
  height: 100%;
@@ -29,7 +42,7 @@
29
42
  .swiper-pagination {
30
43
  position: absolute;
31
44
  top: 100px;
32
- left: 54%;
45
+ left: 50%;
33
46
  transform: translateX(-50%);
34
47
  display: flex;
35
48
  gap: 5px;
@@ -73,10 +86,9 @@
73
86
  height: 100%;
74
87
  width: 100%;
75
88
  position: relative;
76
- left: -22px;
77
89
 
78
- .dashboard-estimated {
79
90
 
91
+ .dashboard-estimated {
80
92
  position: relative;
81
93
  left: 52px;
82
94
  top: 10px;
@@ -238,6 +250,7 @@
238
250
  }
239
251
 
240
252
  @media screen and (max-width: 1920px){
253
+
241
254
  .description-container-dash{
242
255
  .active-index-slide {
243
256
  left: 140px;
@@ -261,6 +274,15 @@
261
274
  }
262
275
  }
263
276
  @media screen and (max-width: 1440px){
277
+ .dashboard-wrapper{
278
+ .swiper-slide{
279
+ .dashboard-estimated{
280
+ position: relative;
281
+ left: 32px;
282
+ }
283
+ }
284
+
285
+ }
264
286
  .description-container-dash{
265
287
  .active-index-slide {
266
288
  left: 58px;
@@ -277,6 +299,15 @@
277
299
  }
278
300
 
279
301
  @media screen and (max-width: 1024px){
302
+ .dashboard-wrapper{
303
+ .swiper-slide{
304
+ .dashboard-estimated{
305
+ position: relative;
306
+ left: 24px;
307
+ }
308
+ }
309
+
310
+ }
280
311
  .description-container-dash{
281
312
  .active-index-slide {
282
313
  left: 44px;
@@ -76,9 +76,43 @@ class MbgStoreGoalController {
76
76
  })
77
77
 
78
78
  swiper.on('slideChange', () => {
79
+ this.startLoadingAnimation(swiper)
79
80
  this.indexActiveSlide =
80
81
  swiper.activeIndex === 1 ? '(mensal)' : swiper.activeIndex === 2 ? '(diário)' : ''
81
82
  })
83
+
84
+ this.startLoadingAnimation(swiper)
85
+ }
86
+ startLoadingAnimation(swiper) {
87
+ const duration = 20000
88
+ const totalLength = 251.2
89
+
90
+ const progress = document.getElementById('progress')
91
+ if (!progress) return
92
+
93
+ let startTime: number | null = null
94
+
95
+ const animate = (timestamp: number) => {
96
+ if (!startTime) startTime = timestamp
97
+ const elapsed = timestamp - startTime
98
+
99
+ const progressPercentage = elapsed / duration
100
+ const currentOffset = totalLength * (1 - progressPercentage)
101
+
102
+ progress.style.strokeDashoffset = `${currentOffset}`
103
+
104
+ if (elapsed < duration) {
105
+ requestAnimationFrame(animate)
106
+ } else {
107
+ progress.style.strokeDashoffset = '0'
108
+ if (swiper.autoplay.running) {
109
+ swiper.autoplay.start()
110
+ }
111
+ }
112
+ }
113
+
114
+ progress.style.strokeDashoffset = `${totalLength}`
115
+ requestAnimationFrame(animate)
82
116
  }
83
117
 
84
118
  goalDataForTheMonthConfig() {
package/src/index.html CHANGED
@@ -161,7 +161,7 @@
161
161
  <div class="col-md-12"> -->
162
162
  <div class=""
163
163
  style="height: 260px">
164
- <mbg-average-customer-time></mbg-average-customer-time>
164
+ <mbg-store-goal></mbg-store-goal>
165
165
 
166
166
  <!-- <mbg-text-editor ng-model="editorJodit"
167
167
  ng-if="testeeditorif"