Abandoned Cart Lite for WooCommerce - Version 5.8.8

Version Description

(06.04.2021)

Download this release

Release Info

Developer tychesoftwares
Plugin Icon 128x128 Abandoned Cart Lite for WooCommerce
Version 5.8.8
Comparing to
See all releases

Code changes from version 5.8.7 to 5.8.8

assets/css/admin/wcap_add_to_cart_popup_modal.css CHANGED
@@ -1,547 +1,844 @@
1
- .wcap_popup_main_div{
2
- width: 100%;
3
- height: 100%
4
- }
5
- .wcap_popup_main_table{
6
- width: 100%;
7
- height: 100%
8
- }
9
- .wcap_popup_main_table_tr{
10
- width: 100%;
11
- height: 100%
12
- }
13
- .wcap_popup_main_table_td_settings{
14
- float:left;
15
- width:52% ;
16
- }
17
- .wcap_popup_main_table_td_preview{
18
- float:right;
19
- width: 45%;
20
- }
21
-
22
- /* heading section */
23
- .wcap_heading_section_table{
24
- width: 100%;
25
- }
26
- .wcap_heading_section_tr{
27
- width: 100%;
28
- }
29
- .wcap_heading_section_table_heading{
30
- float: left;
31
- }
32
- .wcap_heading_section_text_field{
33
- float:left;
34
- width:52% ;
35
- }
36
- .wcap_heading_section_text_field_color{
37
- float:right;
38
- width: 45%;
39
- }
40
-
41
- .wcap_heading_section_text_email{
42
- width: 95%;
43
- font-size: 1em;
44
- }
45
- .wcap_popup_heading_color_picker{
46
- width: 40%;
47
- font-size: 1em;
48
- }
49
-
50
- /* text section */
51
- .wcap_text_section_table{
52
- width: 100%;
53
- }
54
- .wcap_text_section_tr{
55
- width: 100%;
56
- }
57
- .wcap_text_section_table_heading{
58
- float: left;
59
- }
60
- .wcap_text_section_text_field{
61
- float:left;
62
- width:52% ;
63
- }
64
- .wcap_text_section_field_color{
65
- float:right;
66
- width: 45%;
67
- }
68
-
69
- .wcap_text_section_input_text{
70
- width: 95%;
71
- font-size: 1em;
72
- }
73
- .wcap_popup_text_color_picker{
74
- width: 40%;
75
- font-size: 1em;
76
- }
77
-
78
- /* Email placeholder section */
79
- .wcap_email_placeholder_section_table{
80
- width: 100%;
81
- }
82
- .wcap_email_placeholder_section_tr{
83
- width: 100%;
84
- }
85
- .wcap_email_placeholder_section_table_heading{
86
- float: left;
87
- }
88
- .wcap_email_placeholder_section_text_field{
89
- float:left;
90
- width:80% ;
91
- }
92
- .wcap_email_placeholder_section_input_text{
93
- width: 95%;
94
- font-size: 1em;
95
- }
96
-
97
- /* button section */
98
- .wcap_button_section_table{
99
- width: 100%;
100
- }
101
- .wcap_button_section_tr{
102
- width: 100%;
103
- }
104
- .wcap_button_section_table_heading{
105
- float: left;
106
- }
107
- .wcap_button_section_text_field{
108
- float:left;
109
- width:95% ;
110
- }
111
- .wcap_button_section_input_text{
112
- width: 80%;
113
- font-size: 1em;
114
- }
115
-
116
- .wcap_button_color_section_tr{
117
- width: 100%;
118
- }
119
-
120
- .wcap_button_color_section_text_field{
121
- float:left;
122
- width:49% ;
123
- }
124
- .wcap_button_text_color_section_text_field{
125
- float:right;
126
- width:49% ;
127
- margin-left: 5px;
128
- }
129
-
130
- .wcap_button_color_picker{
131
- width: 46%;
132
- font-size: 1em;
133
- }
134
- .wcap_button_text_color_picker{
135
- width: 46%;
136
- font-size: 1em;
137
- }
138
-
139
- /* Non mandatory field text section */
140
- .wcap_non_mandatory_modal_section_fields_div_table{
141
- width: 100%;
142
- }
143
- .wcap_non_mandatory_modal_section_fields_tr{
144
- width: 100%;
145
- }
146
- .wcap_non_mandatory_modal_section_fields_table_heading{
147
- float: left;
148
- }
149
- .wcap_non_mandatory_modal_section_fields_text_field{
150
- float:left;
151
- width:95% ;
152
- }
153
- .wcap_non_mandatory_modal_section_fields_input_text{
154
- width: 80%;
155
- font-size: 1em;
156
- }
157
-
158
- /* popup preview */
159
- .wcap_container {
160
- position: relative;
161
- top: 0;
162
- bottom: 0;
163
- right: 0;
164
- left: 0;
165
- background-color: rgba(0, 0, 0, 0.7);
166
- overflow: auto;
167
- padding: 0 10px;
168
- background-color: transparent;
169
- }
170
-
171
- .wcap_popup_close{
172
- position: absolute;
173
- top: 5px;
174
- right: 5px;
175
- cursor: pointer;
176
- color: #bbb;
177
- z-index: 100;
178
- padding: 9px;
179
- background-size: 18px;
180
- background-position: center;
181
- background-image: url("../../images/atc_cancel_icon.svg");
182
- background-repeat: no-repeat;
183
- }
184
-
185
- .wcap_container .wcap_popup_heading_container{
186
- position: relative;
187
- background: #f8f9fb;
188
- border-bottom: 1px solid #dedede;
189
- -webkit-border-radius: 5px 5px 0 0;
190
- -moz-border-radius: 5px 5px 0 0;
191
- -ms-border-radius: 5px 5px 0 0;
192
- border-radius: 5px 5px 0 0;
193
- padding-top: 18px;
194
- padding-bottom: 16px;
195
- text-align: center;
196
- }
197
-
198
- .wcap_container .wcap_popup_content {
199
- position: relative;
200
- z-index: 2;
201
- -webkit-border-radius: 5px;
202
- -moz-border-radius: 5px;
203
- -ms-border-radius: 5px;
204
- border-radius: 5px;
205
- }
206
-
207
- .wcap_container .wcap_popup_content > * {
208
- padding-left: 18px;
209
- padding-right: 18px;
210
- }
211
-
212
- .wcap_container .wcap_popup_icon {
213
-
214
- background-image: url("../../images/atc_popup_icon.svg");
215
- background-repeat: no-repeat;
216
- display: block;
217
- background-size: 65px;
218
- background-position: center;
219
- background-color: #fff;
220
- background-repeat: no-repeat;
221
- border: 2px solid #ecedf3;
222
- border-radius: 50%;
223
- margin: 0 auto;
224
- margin-right: 5px;
225
- margin-left: 2px;
226
- position: relative;
227
- height: 98px;
228
- width: 98px;
229
- }
230
-
231
- .wcap_container .wcap_popup_heading {
232
- padding-top: 10px;
233
- margin: 0;
234
- font-family: "Lato", sans-serif !important;
235
- font-size: 37px;
236
- font-weight: bold;
237
- line-height: 36px;
238
- color: #737f97;
239
- text-align: center;
240
- display: block;
241
- text-transform: initial;
242
- }
243
-
244
- .wcap_container .wcap_popup_text {
245
- color: #bbc9d2;
246
- font-size: 16px;
247
- line-height: 20px;
248
- font-family: "Lato", sans-serif !important;
249
- text-align: center;
250
- text-transform: initial;
251
- }
252
-
253
- .wcap_container .wcap_popup_form {
254
- position: relative;
255
- text-align: left;
256
- font-family: inherit;
257
- padding-top: 26px;
258
- padding-bottom: 15px;
259
- background-color: #FFFFFF !important;
260
- }
261
-
262
- .wcap_container div {
263
- display: block;
264
- }
265
-
266
- .wcap_container .wcap_popup_form:after {
267
- content: '';
268
- display: block;
269
- position: absolute;
270
- left: 50%;
271
- top: -1px;
272
- width: 0;
273
- height: 0;
274
- margin-left: -16px;
275
- }
276
-
277
- .wcap_container .wcap_popup_form:before {
278
- content: '';
279
- display: block;
280
- position: absolute;
281
- left: 50%;
282
- top: -1px;
283
- width: 0;
284
- height: 0;
285
- margin-left: -16px;
286
- }
287
-
288
- .wcap_container .wcap_popup_form:before {
289
- left: 50%;
290
- margin-left: -17px;
291
- border-left: 17px solid transparent;
292
- border-right: 17px solid transparent;
293
- border-top: 17px solid #dedede;
294
- }
295
-
296
- .wcap_container .wcap_popup_form:after {
297
- border-left: 16px solid transparent;
298
- border-right: 16px solid transparent;
299
- border-top: 16px solid #f8f9fb;
300
- }
301
-
302
- .wcap_container .wcap_popup_input_field_container {
303
- position: relative;
304
- }
305
-
306
- .wcap_container input[type="text"].wcap_popup_input {
307
- -webkit-appearance: none;
308
- background: #fff !important;
309
- border-width: 1px !important;
310
- border-style: solid !important;
311
- border-color: #ccc;
312
- color: rgba(0, 0, 0, 0.75) !important;
313
- display: block;
314
- font-family: "Lato", sans-serif !important;
315
- font-size: 18px !important;
316
- font-style: normal;
317
- line-height: 20px !important;
318
- margin: 0 0 16px 0;
319
- padding: 8px;
320
- height: 42px;
321
- width: 100%;
322
- max-width: none !important;
323
- margin-bottom: 10px;
324
- outline: none !important;
325
- box-shadow: none;
326
- -webkit-box-sizing: border-box;
327
- -moz-box-sizing: border-box;
328
- -o-box-sizing: border-box;
329
- -ms-box-sizing: border-box;
330
- box-sizing: border-box;
331
- -webkit-border-radius: 5px;
332
- -moz-border-radius: 5px;
333
- -ms-border-radius: 5px;
334
- border-radius: 5px;
335
- }
336
-
337
- .wcap_container .wcap_popup_button {
338
- position: relative;
339
- cursor: pointer;
340
- font-family: "Lato", sans-serif !important;
341
- font-size: 20px;
342
- font-weight: normal;
343
- line-height: 20px;
344
- text-decoration: none;
345
- text-align: center;
346
- text-shadow: none;
347
- text-transform: initial;
348
- width: auto;
349
- height: auto;
350
- min-width: initial;
351
- outline: 0;
352
- display: inline-block;
353
- background-color: #228fff ;
354
- border-top: none !important;
355
- border-left: none !important;
356
- border-right: none !important;
357
- border-bottom: none !important;
358
- color: #ffffff;
359
- width: 100%;
360
- margin: 0;
361
- padding: 10px 0;
362
- font-weight: bold;
363
- cursor: pointer;
364
- -webkit-border-radius: 5px;
365
- -moz-border-radius: 5px;
366
- -ms-border-radius: 5px;
367
- border-radius: 5px;
368
- }
369
-
370
- .wcap_container .wcap_popup_wrapper {
371
- position: relative;
372
- top: 50%;
373
- -webkit-backface-visibility: hidden;
374
- -webkit-border-radius: 5px;
375
- -moz-border-radius: 5px;
376
- -ms-border-radius: 5px;
377
- }
378
-
379
- .wcap_popup_wrapper {
380
- border: 1px solid #EBEBEC;
381
- }
382
-
383
- .wcap_container .wcap_popup_plus_sign {
384
- background-image: url("../../images/atc_plus_icon.png");
385
- background-repeat: no-repeat;
386
- background-color: #228fff ;
387
- background-repeat: no-repeat;
388
- background-position: center;
389
- background-size: 16px;
390
- border-radius: 50%;
391
- height: 24px;
392
- left: 74px;
393
- top: -3px;
394
- position: absolute;
395
- width: 24px;
396
- }
397
- @media (min-width: 530px){
398
- .wcap_container .wcap_popup_icon_container {
399
- position: relative;
400
- padding-right: 6px;
401
- display: table-cell;
402
- vertical-align: middle;
403
- width: 105px;
404
- }
405
-
406
- .wcap_container .wcap_popup_text_container {
407
- display: table-cell;
408
- vertical-align: top;
409
- }
410
- .wcap_popup_main_table_td_preview{
411
- margin-top: 5%;
412
- position: -webkit-sticky;
413
- position: sticky;
414
- top: 0;
415
- padding-top: 75px;
416
- }
417
- .wcap_container .wcap_popup_text {
418
- text-align: left;
419
- }
420
- }
421
-
422
- .iris-picker {
423
- z-index: 100;
424
- display: none;
425
- position: absolute !important;
426
- border: 1px solid #ccc;
427
- border-radius: 3px;
428
- box-shadow: 0 1px 3px rgba(0,0,0,.2);
429
- }
430
- .colorpickpreview {
431
- padding: 3px;
432
- padding-left: 20px;
433
- border: 1px solid #ddd;
434
- border-right: 0;
435
- margin-left: -3px;
436
- }
437
-
438
- /* To enable the popup modal */
439
- .wcap-enable-atc-modal {
440
- cursor: pointer;
441
- text-indent: -999em;
442
- display: block;
443
- width: 38px;
444
- height: 22px;
445
- border-radius: 30px;
446
- border: none;
447
- position: relative;
448
- box-sizing: border-box;
449
- -webkit-transition: all .3s ease;
450
- transition: all .3s ease;
451
- box-shadow: inset 0 0 0 0 transparent;
452
- }
453
- .wcap-enable-atc-modal:focus {
454
- outline: none;
455
- }
456
- .wcap-enable-atc-modal:before {
457
- border-radius: 50%;
458
- background: #ffffff;
459
- content: '';
460
- position: absolute;
461
- display: block;
462
- width: 18px;
463
- height: 18px;
464
- top: 2px;
465
- left: 2px;
466
- -webkit-transition: all .15s ease;
467
- transition: all .15s ease;
468
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
469
- }
470
- .wcap-enable-atc-modal[wcap-atc-switch-modal-enable="on"] {
471
- box-shadow: inset 0 0 0 11px #008000;
472
- }
473
- .wcap-enable-atc-modal[wcap-atc-switch-modal-enable="on"]:before {
474
- -webkit-transform: translateX(16px);
475
- transform: translateX(16px);
476
- }
477
- .wcap-enable-atc-modal[wcap-atc-switch-modal-enable="off"] {
478
- background: #ccc;
479
- }
480
- .wcap-enable-atc-modal.wcap-loading {
481
- cursor: default;
482
- opacity: 0.5;
483
- }
484
-
485
- .wcap_non_mandatory_text_wrapper{
486
- text-align: center;
487
- }
488
-
489
- .wcap_non_mandatory_text_wrapper a{
490
- text-decoration:none;
491
- }
492
-
493
- /* To display the popup modal mandatory*/
494
- .wcap-switch-atc-modal-mandatory {
495
- cursor: pointer;
496
- text-indent: -999em;
497
- display: block;
498
- width: 38px;
499
- height: 22px;
500
- border-radius: 30px;
501
- border: none;
502
- position: relative;
503
- box-sizing: border-box;
504
- -webkit-transition: all .3s ease;
505
- transition: all .3s ease;
506
- box-shadow: inset 0 0 0 0 transparent;
507
- }
508
- .wcap-switch-atc-modal-mandatory:focus {
509
- outline: none;
510
- }
511
- .wcap-switch-atc-modal-mandatory:before {
512
- border-radius: 50%;
513
- background: #ffffff;
514
- content: '';
515
- position: absolute;
516
- display: block;
517
- width: 18px;
518
- height: 18px;
519
- top: 2px;
520
- left: 2px;
521
- -webkit-transition: all .15s ease;
522
- transition: all .15s ease;
523
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
524
- }
525
- .wcap-switch-atc-modal-mandatory[
526
- wcap-atc-switch-modal-mandatory="on"] {
527
- box-shadow: inset 0 0 0 11px #008000;
528
- }
529
- .wcap-switch-atc-modal-mandatory[wcap-atc-switch-modal-mandatory="on"]:before {
530
- -webkit-transform: translateX(16px);
531
- transform: translateX(16px);
532
- }
533
- .wcap-switch-atc-modal-mandatory[wcap-atc-switch-modal-mandatory="off"] {
534
- background: #ccc;
535
- }
536
- .wcap-switch-atc-modal-mandatory.wcap-loading {
537
- cursor: default;
538
- opacity: 0.5;
539
- }
540
-
541
- .wcap_atc_between_fields_space {
542
- margin-top: 2%;
543
- }
544
-
545
- .wcap_reset_button {
546
- margin-left: 5% !important;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
547
  }
1
+ .wcap_popup_main_div{
2
+ width: 100%;
3
+ height: 100%
4
+ }
5
+ .wcap_popup_main_table{
6
+ width: 100%;
7
+ height: 100%
8
+ }
9
+ .wcap_popup_main_table_tr{
10
+ width: 100%;
11
+ height: 100%
12
+ }
13
+ .wcap_popup_main_table_td_settings{
14
+ float:left;
15
+ width:52% ;
16
+ }
17
+ .wcap_popup_main_table_td_preview{
18
+ float:right;
19
+ width: 45%;
20
+ }
21
+
22
+ /* heading section */
23
+ .wcap_heading_section_table{
24
+ width: 100%;
25
+ }
26
+ .wcap_heading_section_tr{
27
+ width: 100%;
28
+ }
29
+ .wcap_heading_section_table_heading{
30
+ float: left;
31
+ }
32
+ .wcap_heading_section_text_field{
33
+ float:left;
34
+ width:52% ;
35
+ }
36
+ .wcap_heading_section_text_field_color{
37
+ float:right;
38
+ width: 45%;
39
+ }
40
+
41
+ .wcap_heading_section_text_email{
42
+ width: 95%;
43
+ font-size: 1em;
44
+ }
45
+ .wcap_popup_heading_color_picker{
46
+ width: 40%;
47
+ font-size: 1em;
48
+ }
49
+
50
+ /* text section */
51
+ .wcap_text_section_table{
52
+ width: 100%;
53
+ }
54
+ .wcap_text_section_tr{
55
+ width: 100%;
56
+ }
57
+ .wcap_text_section_table_heading{
58
+ float: left;
59
+ }
60
+ .wcap_text_section_text_field{
61
+ float:left;
62
+ width:52% ;
63
+ }
64
+ .wcap_text_section_field_color{
65
+ float:right;
66
+ width: 45%;
67
+ }
68
+
69
+ .wcap_text_section_input_text{
70
+ width: 95%;
71
+ font-size: 1em;
72
+ }
73
+ .wcap_popup_text_color_picker{
74
+ width: 40%;
75
+ font-size: 1em;
76
+ }
77
+
78
+ /* Email placeholder section */
79
+ .wcap_email_placeholder_section_table{
80
+ width: 100%;
81
+ }
82
+ .wcap_email_placeholder_section_tr{
83
+ width: 100%;
84
+ }
85
+ .wcap_email_placeholder_section_table_heading{
86
+ float: left;
87
+ }
88
+ .wcap_email_placeholder_section_text_field{
89
+ float:left;
90
+ width:80% ;
91
+ }
92
+ .wcap_email_placeholder_section_input_text{
93
+ width: 95%;
94
+ font-size: 1em;
95
+ }
96
+
97
+ /* button section */
98
+ .wcap_button_section_table{
99
+ width: 100%;
100
+ }
101
+ .wcap_button_section_tr{
102
+ width: 100%;
103
+ }
104
+ .wcap_button_section_table_heading{
105
+ float: left;
106
+ }
107
+ .wcap_button_section_text_field{
108
+ float:left;
109
+ width:95% ;
110
+ }
111
+ .wcap_button_section_input_text{
112
+ width: 80%;
113
+ font-size: 1em;
114
+ }
115
+
116
+ .wcap_button_color_section_tr{
117
+ width: 100%;
118
+ }
119
+
120
+ .wcap_button_color_section_text_field{
121
+ float:left;
122
+ width:49% ;
123
+ }
124
+ .wcap_button_text_color_section_text_field{
125
+ float: right;
126
+ width: 50%;
127
+ }
128
+
129
+ .wcap_button_color_picker{
130
+ width: 46%;
131
+ font-size: 1em;
132
+ }
133
+ .wcap_button_text_color_picker{
134
+ width: 46%;
135
+ font-size: 1em;
136
+ }
137
+
138
+ /* Non mandatory field text section */
139
+ .wcap_non_mandatory_modal_section_fields_div_table{
140
+ width: 100%;
141
+ }
142
+ .wcap_non_mandatory_modal_section_fields_tr{
143
+ width: 100%;
144
+ }
145
+ .wcap_non_mandatory_modal_section_fields_table_heading{
146
+ float: left;
147
+ }
148
+ .wcap_non_mandatory_modal_section_fields_text_field{
149
+ float:left;
150
+ width:95% ;
151
+ }
152
+ .wcap_non_mandatory_modal_section_fields_input_text{
153
+ width: 80%;
154
+ font-size: 1em;
155
+ }
156
+
157
+ .wcap_template_name {
158
+ width: 200%;
159
+ font-size: 1em;
160
+ }
161
+ /* popup preview */
162
+ .wcap_container {
163
+ position: relative;
164
+ bottom: 0;
165
+ right: 0;
166
+ left: 0;
167
+ background-color: rgba(0, 0, 0, 0.7);
168
+ overflow: auto;
169
+ background-color: transparent;
170
+ }
171
+
172
+ .wcap_popup_close{
173
+ position: absolute;
174
+ top: 5px;
175
+ right: 5px;
176
+ cursor: pointer;
177
+ color: #bbb;
178
+ z-index: 100;
179
+ padding: 9px;
180
+ background-size: 18px;
181
+ background-position: center;
182
+ background-image: url("../../images/atc_cancel_icon.svg");
183
+ background-repeat: no-repeat;
184
+ }
185
+
186
+ .wcap_container .wcap_popup_heading_container{
187
+ position: relative;
188
+ background: #f8f9fb;
189
+ border-bottom: 1px solid #dedede;
190
+ -webkit-border-radius: 5px 5px 0 0;
191
+ -moz-border-radius: 5px 5px 0 0;
192
+ -ms-border-radius: 5px 5px 0 0;
193
+ border-radius: 5px 5px 0 0;
194
+ padding-top: 18px;
195
+ padding-bottom: 16px;
196
+ text-align: center;
197
+ }
198
+
199
+ .wcap_container .wcap_popup_content {
200
+ position: relative;
201
+ z-index: 2;
202
+ -webkit-border-radius: 5px;
203
+ -moz-border-radius: 5px;
204
+ -ms-border-radius: 5px;
205
+ border-radius: 5px;
206
+ }
207
+
208
+ .wcap_container .wcap_popup_content > * {
209
+ padding-left: 18px;
210
+ padding-right: 18px;
211
+ }
212
+
213
+ .wcap_container .wcap_popup_icon {
214
+
215
+ background-image: url("../../images/atc_popup_icon.svg");
216
+ background-repeat: no-repeat;
217
+ display: block;
218
+ background-size: 65px;
219
+ background-position: center;
220
+ background-color: #fff;
221
+ background-repeat: no-repeat;
222
+ border: 2px solid #ecedf3;
223
+ border-radius: 50%;
224
+ margin: 0 auto;
225
+ margin-right: 5px;
226
+ margin-left: 2px;
227
+ position: relative;
228
+ height: 98px;
229
+ width: 98px;
230
+ }
231
+
232
+ .wcap_container .wcap_popup_heading {
233
+ padding-top: 10px;
234
+ margin: 0;
235
+ font-family: "Lato", sans-serif !important;
236
+ font-size: 37px;
237
+ font-weight: bold;
238
+ line-height: 36px;
239
+ color: #737f97;
240
+ text-align: center;
241
+ display: block;
242
+ text-transform: initial;
243
+ }
244
+
245
+ .wcap_container .wcap_popup_text {
246
+ color: #bbc9d2;
247
+ font-size: 16px;
248
+ line-height: 20px;
249
+ font-family: "Lato", sans-serif !important;
250
+ text-align: center;
251
+ text-transform: initial;
252
+ }
253
+
254
+ .wcap_container .wcap_popup_form {
255
+ position: relative;
256
+ text-align: left;
257
+ font-family: inherit;
258
+ padding-top: 26px;
259
+ padding-bottom: 15px;
260
+ background-color: #FFFFFF !important;
261
+ }
262
+
263
+ .wcap_container div {
264
+ display: block;
265
+ }
266
+
267
+ .wcap_container .wcap_popup_form:after {
268
+ content: '';
269
+ display: block;
270
+ position: absolute;
271
+ left: 50%;
272
+ top: -1px;
273
+ width: 0;
274
+ height: 0;
275
+ margin-left: -16px;
276
+ }
277
+
278
+ .wcap_container .wcap_popup_form:before {
279
+ content: '';
280
+ display: block;
281
+ position: absolute;
282
+ left: 50%;
283
+ top: -1px;
284
+ width: 0;
285
+ height: 0;
286
+ margin-left: -16px;
287
+ }
288
+
289
+ .wcap_container .wcap_popup_form:before {
290
+ left: 50%;
291
+ margin-left: -17px;
292
+ border-left: 17px solid transparent;
293
+ border-right: 17px solid transparent;
294
+ border-top: 17px solid #dedede;
295
+ }
296
+
297
+ .wcap_container .wcap_popup_form:after {
298
+ border-left: 16px solid transparent;
299
+ border-right: 16px solid transparent;
300
+ border-top: 16px solid #f8f9fb;
301
+ }
302
+
303
+ .wcap_container .wcap_popup_input_field_container {
304
+ position: relative;
305
+ }
306
+
307
+ .wcap_container input[type="text"].wcap_popup_input {
308
+ -webkit-appearance: none;
309
+ background: #fff !important;
310
+ border-width: 1px !important;
311
+ border-style: solid !important;
312
+ border-color: #ccc;
313
+ color: rgba(0, 0, 0, 0.75) !important;
314
+ display: block;
315
+ font-family: "Lato", sans-serif !important;
316
+ font-size: 18px !important;
317
+ font-style: normal;
318
+ line-height: 20px !important;
319
+ margin: 0 0 16px 0;
320
+ padding: 8px;
321
+ height: 42px;
322
+ width: 100%;
323
+ max-width: none !important;
324
+ margin-bottom: 10px;
325
+ outline: none !important;
326
+ box-shadow: none;
327
+ -webkit-box-sizing: border-box;
328
+ -moz-box-sizing: border-box;
329
+ -o-box-sizing: border-box;
330
+ -ms-box-sizing: border-box;
331
+ box-sizing: border-box;
332
+ -webkit-border-radius: 5px;
333
+ -moz-border-radius: 5px;
334
+ -ms-border-radius: 5px;
335
+ border-radius: 5px;
336
+ }
337
+
338
+ .wcap_container .wcap_popup_button {
339
+ position: relative;
340
+ cursor: pointer;
341
+ font-family: "Lato", sans-serif !important;
342
+ font-size: 20px;
343
+ font-weight: normal;
344
+ line-height: 20px;
345
+ text-decoration: none;
346
+ text-align: center;
347
+ text-shadow: none;
348
+ text-transform: initial;
349
+ width: auto;
350
+ height: auto;
351
+ min-width: initial;
352
+ outline: 0;
353
+ display: inline-block;
354
+ background-color: #228fff ;
355
+ border-top: none !important;
356
+ border-left: none !important;
357
+ border-right: none !important;
358
+ border-bottom: none !important;
359
+ color: #ffffff;
360
+ width: 100%;
361
+ margin: 0;
362
+ padding: 10px 0;
363
+ font-weight: bold;
364
+ cursor: pointer;
365
+ -webkit-border-radius: 5px;
366
+ -moz-border-radius: 5px;
367
+ -ms-border-radius: 5px;
368
+ border-radius: 5px;
369
+ }
370
+
371
+ .wcap_container .wcap_popup_wrapper {
372
+ position: relative;
373
+ top: 50%;
374
+ -webkit-backface-visibility: hidden;
375
+ -webkit-border-radius: 5px;
376
+ -moz-border-radius: 5px;
377
+ -ms-border-radius: 5px;
378
+ }
379
+
380
+ .wcap_popup_wrapper {
381
+ border: 1px solid #EBEBEC;
382
+ }
383
+
384
+ .wcap_container .wcap_popup_plus_sign {
385
+ background-image: url("../../images/atc_plus_icon.png");
386
+ background-repeat: no-repeat;
387
+ background-color: #228fff ;
388
+ background-repeat: no-repeat;
389
+ background-position: center;
390
+ background-size: 16px;
391
+ border-radius: 50%;
392
+ height: 24px;
393
+ left: 74px;
394
+ top: -3px;
395
+ position: absolute;
396
+ width: 24px;
397
+ }
398
+ @media (min-width: 530px){
399
+ .wcap_container .wcap_popup_icon_container {
400
+ position: relative;
401
+ padding-right: 6px;
402
+ display: table-cell;
403
+ vertical-align: middle;
404
+ width: 105px;
405
+ }
406
+
407
+ .wcap_container .wcap_popup_text_container {
408
+ display: table-cell;
409
+ vertical-align: top;
410
+ }
411
+ .wcap_popup_main_table_td_preview{
412
+ margin-top: -10%;
413
+ position: -webkit-sticky;
414
+ position: sticky;
415
+ top: 0;
416
+ padding-top: 75px;
417
+ }
418
+ .wcap_container .wcap_popup_text {
419
+ text-align: left;
420
+ }
421
+ }
422
+
423
+ .iris-picker {
424
+ z-index: 100;
425
+ display: none;
426
+ position: absolute !important;
427
+ border: 1px solid #ccc;
428
+ border-radius: 3px;
429
+ box-shadow: 0 1px 3px rgba(0,0,0,.2);
430
+ }
431
+ .colorpickpreview {
432
+ padding: 5px;
433
+ padding-left: 20px;
434
+ border: 1px solid #ddd;
435
+ border-right: 0;
436
+ margin-left: -3px;
437
+ }
438
+
439
+ /* To enable the popup modal */
440
+ .wcap-enable-atc-modal {
441
+ cursor: pointer;
442
+ text-indent: -999em;
443
+ display: block;
444
+ width: 38px;
445
+ height: 22px;
446
+ border-radius: 30px;
447
+ border: none;
448
+ position: relative;
449
+ box-sizing: border-box;
450
+ -webkit-transition: all .3s ease;
451
+ transition: all .3s ease;
452
+ box-shadow: inset 0 0 0 0 transparent;
453
+ }
454
+ .wcap-enable-atc-modal:focus {
455
+ outline: none;
456
+ }
457
+ .wcap-enable-atc-modal:before {
458
+ border-radius: 50%;
459
+ background: #ffffff;
460
+ content: '';
461
+ position: absolute;
462
+ display: block;
463
+ width: 18px;
464
+ height: 18px;
465
+ top: 2px;
466
+ left: 2px;
467
+ -webkit-transition: all .15s ease;
468
+ transition: all .15s ease;
469
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
470
+ }
471
+ .wcap-enable-atc-modal[wcap-atc-switch-modal-enable="on"] {
472
+ box-shadow: inset 0 0 0 11px #008000;
473
+ }
474
+ .wcap-enable-atc-modal[wcap-atc-switch-modal-enable="on"]:before {
475
+ -webkit-transform: translateX(16px);
476
+ transform: translateX(16px);
477
+ }
478
+ .wcap-enable-atc-modal[wcap-atc-switch-modal-enable="off"] {
479
+ background: #ccc;
480
+ }
481
+ .wcap-enable-atc-modal.wcap-loading {
482
+ cursor: default;
483
+ opacity: 0.5;
484
+ }
485
+
486
+ .wcap_non_mandatory_text_wrapper{
487
+ text-align: center;
488
+ }
489
+
490
+ .wcap_non_mandatory_text_wrapper a{
491
+ text-decoration:none;
492
+ }
493
+
494
+ /* To display the popup modal mandatory*/
495
+ .wcap-switch-atc-modal-mandatory {
496
+ cursor: pointer;
497
+ text-indent: -999em;
498
+ display: block;
499
+ width: 38px;
500
+ height: 22px;
501
+ border-radius: 30px;
502
+ border: none;
503
+ position: relative;
504
+ box-sizing: border-box;
505
+ -webkit-transition: all .3s ease;
506
+ transition: all .3s ease;
507
+ box-shadow: inset 0 0 0 0 transparent;
508
+ }
509
+ .wcap-switch-atc-modal-mandatory:focus {
510
+ outline: none;
511
+ }
512
+ .wcap-switch-atc-modal-mandatory:before {
513
+ border-radius: 50%;
514
+ background: #ffffff;
515
+ content: '';
516
+ position: absolute;
517
+ display: block;
518
+ width: 18px;
519
+ height: 18px;
520
+ top: 2px;
521
+ left: 2px;
522
+ -webkit-transition: all .15s ease;
523
+ transition: all .15s ease;
524
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
525
+ }
526
+ .wcap-switch-atc-modal-mandatory[
527
+ wcap-atc-switch-modal-mandatory="on"] {
528
+ box-shadow: inset 0 0 0 11px #008000;
529
+ }
530
+ .wcap-switch-atc-modal-mandatory[wcap-atc-switch-modal-mandatory="on"]:before {
531
+ -webkit-transform: translateX(16px);
532
+ transform: translateX(16px);
533
+ }
534
+ .wcap-switch-atc-modal-mandatory[wcap-atc-switch-modal-mandatory="off"] {
535
+ background: #ccc;
536
+ }
537
+ .wcap-switch-atc-modal-mandatory.wcap-loading {
538
+ cursor: default;
539
+ opacity: 0.5;
540
+ }
541
+
542
+ .wcap-switch-atc-capture-phone {
543
+ cursor: pointer;
544
+ text-indent: -999em;
545
+ display: block;
546
+ width: 38px;
547
+ height: 22px;
548
+ border-radius: 30px;
549
+ border: none;
550
+ position: relative;
551
+ box-sizing: border-box;
552
+ -webkit-transition: all .3s ease;
553
+ transition: all .3s ease;
554
+ box-shadow: inset 0 0 0 0 transparent;
555
+ }
556
+ .wcap-switch-atc-capture-phone:focus {
557
+ outline: none;
558
+ }
559
+ .wcap-switch-atc-capture-phone:before {
560
+ border-radius: 50%;
561
+ background: #ffffff;
562
+ content: '';
563
+ position: absolute;
564
+ display: block;
565
+ width: 18px;
566
+ height: 18px;
567
+ top: 2px;
568
+ left: 2px;
569
+ -webkit-transition: all .15s ease;
570
+ transition: all .15s ease;
571
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
572
+ }
573
+ .wcap-switch-atc-capture-phone[
574
+ wcap-atc-capture-phone="on"] {
575
+ box-shadow: inset 0 0 0 11px #008000;
576
+ }
577
+ .wcap-switch-atc-capture-phone[wcap-atc-capture-phone="on"]:before {
578
+ -webkit-transform: translateX(16px);
579
+ transform: translateX(16px);
580
+ }
581
+ .wcap-switch-atc-capture-phone[wcap-atc-capture-phone="off"] {
582
+ background: #ccc;
583
+ }
584
+
585
+ .wcap_phone_placeholder_section_table{
586
+ width: 100%;
587
+ }
588
+ .wcap_phone_placeholder_section_tr{
589
+ width: 100%;
590
+ }
591
+ .wcap_phone_placeholder_section_table_heading{
592
+ float: left;
593
+ }
594
+ .wcap_phone_placeholder_section_text_field{
595
+ float:left;
596
+ width:80% ;
597
+ }
598
+ .wcap_phone_placeholder_section_input_text{
599
+ width: 95%;
600
+ font-size: 1em;
601
+ }
602
+
603
+ .wcap_atc_between_fields_space {
604
+ margin-top: 2%;
605
+ }
606
+
607
+ .wcap_reset_button {
608
+ margin-left: 5% !important;
609
+ }
610
+
611
+ .wcap_coupon_settings_div_table {
612
+ margin-top: 2%;
613
+ width: 100%;
614
+ height: 100%;
615
+ }
616
+
617
+ .wcap_coupon_settings_div_table th {
618
+ float: left;
619
+ }
620
+
621
+ /* To display the auto apply coupons*/
622
+ .wcap-auto-apply-coupons-atc {
623
+ cursor: pointer;
624
+ text-indent: -999em;
625
+ display: block;
626
+ width: 38px;
627
+ height: 22px;
628
+ border-radius: 30px;
629
+ border: none;
630
+ position: relative;
631
+ box-sizing: border-box;
632
+ -webkit-transition: all .3s ease;
633
+ transition: all .3s ease;
634
+ box-shadow: inset 0 0 0 0 transparent;
635
+ }
636
+ .wcap-auto-apply-coupons-atc:focus {
637
+ outline: none;
638
+ }
639
+ .wcap-auto-apply-coupons-atc:before {
640
+ border-radius: 50%;
641
+ background: #ffffff;
642
+ content: '';
643
+ position: absolute;
644
+ display: block;
645
+ width: 18px;
646
+ height: 18px;
647
+ top: 2px;
648
+ left: 2px;
649
+ -webkit-transition: all .15s ease;
650
+ transition: all .15s ease;
651
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
652
+ }
653
+ .wcap-auto-apply-coupons-atc[
654
+ wcap-atc-switch-coupon-enable="on"] {
655
+ box-shadow: inset 0 0 0 11px #008000;
656
+ }
657
+ .wcap-auto-apply-coupons-atc[wcap-atc-switch-coupon-enable="on"]:before {
658
+ -webkit-transform: translateX(16px);
659
+ transform: translateX(16px);
660
+ }
661
+ .wcap-auto-apply-coupons-atc[wcap-atc-switch-coupon-enable="off"] {
662
+ background: #ccc;
663
+ }
664
+
665
+ .wcap-countdown-timer-cart {
666
+ cursor: pointer;
667
+ text-indent: -999em;
668
+ display: block;
669
+ width: 38px;
670
+ height: 22px;
671
+ border-radius: 30px;
672
+ border: none;
673
+ position: relative;
674
+ box-sizing: border-box;
675
+ -webkit-transition: all .3s ease;
676
+ transition: all .3s ease;
677
+ box-shadow: inset 0 0 0 0 transparent;
678
+ }
679
+ .wcap-countdown-timer-cart:focus {
680
+ outline: none;
681
+ }
682
+ .wcap-countdown-timer-cart:before {
683
+ border-radius: 50%;
684
+ background: #ffffff;
685
+ content: '';
686
+ position: absolute;
687
+ display: block;
688
+ width: 18px;
689
+ height: 18px;
690
+ top: 2px;
691
+ left: 2px;
692
+ -webkit-transition: all .15s ease;
693
+ transition: all .15s ease;
694
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
695
+ }
696
+ .wcap-countdown-timer-cart[wcap-atc-countdown-timer-cart-enable="on"] {
697
+ box-shadow: inset 0 0 0 11px #008000;
698
+ }
699
+ .wcap-countdown-timer-cart[wcap-atc-countdown-timer-cart-enable="on"]:before {
700
+ -webkit-transform: translateX(16px);
701
+ transform: translateX(16px);
702
+ }
703
+ .wcap-countdown-timer-cart[wcap-atc-countdown-timer-cart-enable="off"] {
704
+ background: #ccc;
705
+ }
706
+
707
+ #wcap_countdown_msg {
708
+ width: 70%;
709
+ }
710
+
711
+ #wcap_countdown_msg_expired {
712
+ width: 70%;
713
+ }
714
+
715
+ #wcap_atc_coupon_type {
716
+ width: 77%;
717
+ }
718
+
719
+ .wcap_auto_apply_coupon_id {
720
+ margin-bottom: -10px;
721
+ }
722
+
723
+ .wcap_coupon_settings_div_table th {
724
+ margin-top: 15px;
725
+ }
726
+
727
+ .options_group {
728
+ margin-bottom: -10px;
729
+ }
730
+
731
+ #wcap_non_mandatory_modal_section_fields_div {
732
+ margin-bottom: 20px;
733
+ }
734
+
735
+ hr {
736
+ background-color: #ddd;
737
+ height: 1px;
738
+ border: 0px;
739
+ border-top: 1px solid #ddd;
740
+ border-bottom: 1px solid #fafafa;
741
+ }
742
+
743
+ #wcap_coupon_settings {
744
+ margin-top: -10px;
745
+ }
746
+
747
+ .wcap_atc_content th{
748
+ font-weight: 600;
749
+ color: #23282d;
750
+ }
751
+
752
+ #wcap_atc_discount_type {
753
+ width: 37%;
754
+ }
755
+
756
+ #wcap_atc_discount_amount {
757
+ width: 37%;
758
+ }
759
+
760
+ #wcap_atc_coupon_validity {
761
+ width: 37%;
762
+ }
763
+
764
+ #wcap_atc_coupon_note {
765
+ text-align: left;
766
+ font-weight: 400;
767
+ }
768
+
769
+ #sr {
770
+ width: 5%;
771
+ }
772
+ /* Rules List */
773
+ #wcap-rule-list {
774
+ width: 135%;
775
+ }
776
+
777
+ .wcap_rule_condition_col {
778
+ width: 23%;
779
+ }
780
+ #wcap_rules_email_addresses {
781
+ margin-top: 10px;
782
+ }
783
+ td select.wcap_rule_value.wc-product-search {
784
+ width: 90%;
785
+ }
786
+ td.wcap_rule_type_col {
787
+ padding: 0;
788
+ width: 25%;
789
+ }
790
+ td.wcap_rule_value_col {
791
+ width: 30%;
792
+ }
793
+ #wcap-rule-list {
794
+ padding: 0;
795
+ margin-top: 0;
796
+ }
797
+
798
+ #wcap_rule_list_footer {
799
+ padding: 0px;
800
+ border: none;
801
+ }
802
+ .wcap_rule_list_footer_tr:hover {
803
+ background-color: transparent!important;
804
+ }
805
+
806
+ .wcap-rule-list {
807
+ border-collapse: collapse;
808
+ width: 100%;
809
+ }
810
+
811
+ .wcap-rule-list td, .wcap-rule-list th {
812
+ border: 1px solid #ddd;
813
+ padding: 8px;
814
+ }
815
+
816
+ .wcap-rule-list tr:nth-child(even){
817
+ background-color: #f2f2f2;
818
+ }
819
+
820
+ .wcap-rule-list tr:hover {
821
+ background-color: #ddd;
822
+ }
823
+
824
+ .wcap-rule-list th {
825
+ padding-top: 12px;
826
+ padding-bottom: 12px;
827
+ text-align: left;
828
+ background-color: #2775a6;
829
+ color: white;
830
+ }
831
+
832
+ .wcap_add_rule_button {
833
+ border: 1px solid;
834
+ border-radius: 5px;
835
+ padding: 5px 10px 5px 5px;
836
+ text-decoration: none;
837
+ margin-left:5px;
838
+ }
839
+
840
+ .wcap_delete_rule_button {
841
+ border: 1px solid;
842
+ border-radius: 5px;
843
+ padding: 5px;
844
  }
assets/css/admin/wcap_add_to_cart_popup_modal.min.css CHANGED
@@ -1 +1 @@
1
- .wcap_popup_main_div{width:100%;height:100%}.wcap_popup_main_table{width:100%;height:100%}.wcap_popup_main_table_tr{width:100%;height:100%}.wcap_popup_main_table_td_settings{float:left;width:52%}.wcap_popup_main_table_td_preview{float:right;width:45%}.wcap_heading_section_table{width:100%}.wcap_heading_section_tr{width:100%}.wcap_heading_section_table_heading{float:left}.wcap_heading_section_text_field{float:left;width:52%}.wcap_heading_section_text_field_color{float:right;width:45%}.wcap_heading_section_text_email{width:95%;font-size:1em}.wcap_popup_heading_color_picker{width:40%;font-size:1em}.wcap_text_section_table{width:100%}.wcap_text_section_tr{width:100%}.wcap_text_section_table_heading{float:left}.wcap_text_section_text_field{float:left;width:52%}.wcap_text_section_field_color{float:right;width:45%}.wcap_text_section_input_text{width:95%;font-size:1em}.wcap_popup_text_color_picker{width:40%;font-size:1em}.wcap_email_placeholder_section_table{width:100%}.wcap_email_placeholder_section_tr{width:100%}.wcap_email_placeholder_section_table_heading{float:left}.wcap_email_placeholder_section_text_field{float:left;width:80%}.wcap_email_placeholder_section_input_text{width:95%;font-size:1em}.wcap_button_section_table{width:100%}.wcap_button_section_tr{width:100%}.wcap_button_section_table_heading{float:left}.wcap_button_section_text_field{float:left;width:95%}.wcap_button_section_input_text{width:80%;font-size:1em}.wcap_button_color_section_tr{width:100%}.wcap_button_color_section_text_field{float:left;width:49%}.wcap_button_text_color_section_text_field{float:right;width:49%;margin-left:5px}.wcap_button_color_picker{width:46%;font-size:1em}.wcap_button_text_color_picker{width:46%;font-size:1em}.wcap_non_mandatory_modal_section_fields_div_table{width:100%}.wcap_non_mandatory_modal_section_fields_tr{width:100%}.wcap_non_mandatory_modal_section_fields_table_heading{float:left}.wcap_non_mandatory_modal_section_fields_text_field{float:left;width:95%}.wcap_non_mandatory_modal_section_fields_input_text{width:80%;font-size:1em}.wcap_container{position:relative;top:0;bottom:0;right:0;left:0;background-color:rgba(0,0,0,.7);overflow:auto;padding:0 10px;background-color:transparent}.wcap_popup_close{position:absolute;top:5px;right:5px;cursor:pointer;color:#bbb;z-index:100;padding:9px;background-size:18px;background-position:center;background-image:url(../../images/atc_cancel_icon.svg);background-repeat:no-repeat}.wcap_container .wcap_popup_heading_container{position:relative;background:#f8f9fb;border-bottom:1px solid #dedede;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;-ms-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;padding-top:18px;padding-bottom:16px;text-align:center}.wcap_container .wcap_popup_content{position:relative;z-index:2;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px}.wcap_container .wcap_popup_content>*{padding-left:18px;padding-right:18px}.wcap_container .wcap_popup_icon{background-image:url(../../images/atc_popup_icon.svg);background-repeat:no-repeat;display:block;background-size:65px;background-position:center;background-color:#fff;background-repeat:no-repeat;border:2px solid #ecedf3;border-radius:50%;margin:0 auto;margin-right:5px;margin-left:2px;position:relative;height:98px;width:98px}.wcap_container .wcap_popup_heading{padding-top:10px;margin:0;font-family:"Lato",sans-serif!important;font-size:37px;font-weight:700;line-height:36px;color:#737f97;text-align:center;display:block;text-transform:initial}.wcap_container .wcap_popup_text{color:#bbc9d2;font-size:16px;line-height:20px;font-family:"Lato",sans-serif!important;text-align:center;text-transform:initial}.wcap_container .wcap_popup_form{position:relative;text-align:left;font-family:inherit;padding-top:26px;padding-bottom:15px;background-color:#FFFFFF!important}.wcap_container div{display:block}.wcap_container .wcap_popup_form:after{content:'';display:block;position:absolute;left:50%;top:-1px;width:0;height:0;margin-left:-16px}.wcap_container .wcap_popup_form:before{content:'';display:block;position:absolute;left:50%;top:-1px;width:0;height:0;margin-left:-16px}.wcap_container .wcap_popup_form:before{left:50%;margin-left:-17px;border-left:17px solid transparent;border-right:17px solid transparent;border-top:17px solid #dedede}.wcap_container .wcap_popup_form:after{border-left:16px solid transparent;border-right:16px solid transparent;border-top:16px solid #f8f9fb}.wcap_container .wcap_popup_input_field_container{position:relative}.wcap_container input[type="text"].wcap_popup_input{-webkit-appearance:none;background:#fff!important;border-width:1px!important;border-style:solid!important;border-color:#ccc;color:rgba(0,0,0,.75)!important;display:block;font-family:"Lato",sans-serif!important;font-size:18px!important;font-style:normal;line-height:20px!important;margin:0 0 16px 0;padding:8px;height:42px;width:100%;max-width:none!important;margin-bottom:10px;outline:none!important;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px}.wcap_container .wcap_popup_button{position:relative;cursor:pointer;font-family:"Lato",sans-serif!important;font-size:20px;font-weight:400;line-height:20px;text-decoration:none;text-align:center;text-shadow:none;text-transform:initial;width:auto;height:auto;min-width:initial;outline:0;display:inline-block;background-color:#228fff;border-top:none!important;border-left:none!important;border-right:none!important;border-bottom:none!important;color:#fff;width:100%;margin:0;padding:10px 0;font-weight:700;cursor:pointer;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px}.wcap_container .wcap_popup_wrapper{position:relative;top:50%;-webkit-backface-visibility:hidden;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px}.wcap_popup_wrapper{border:1px solid #EBEBEC}.wcap_container .wcap_popup_plus_sign{background-image:url(../../images/atc_plus_icon.png);background-repeat:no-repeat;background-color:#228fff;background-repeat:no-repeat;background-position:center;background-size:16px;border-radius:50%;height:24px;left:74px;top:-3px;position:absolute;width:24px}@media (min-width:530px){.wcap_container .wcap_popup_icon_container{position:relative;padding-right:6px;display:table-cell;vertical-align:middle;width:105px}.wcap_container .wcap_popup_text_container{display:table-cell;vertical-align:top}.wcap_popup_main_table_td_preview{margin-top:5%;position:-webkit-sticky;position:sticky;top:0;padding-top:75px}.wcap_container .wcap_popup_text{text-align:left}}.iris-picker{z-index:100;display:none;position:absolute!important;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.2)}.colorpickpreview{padding:3px;padding-left:20px;border:1px solid #ddd;border-right:0;margin-left:-3px}.wcap-enable-atc-modal{cursor:pointer;text-indent:-999em;display:block;width:38px;height:22px;border-radius:30px;border:none;position:relative;box-sizing:border-box;-webkit-transition:all .3s ease;transition:all .3s ease;box-shadow:inset 0 0 0 0 transparent}.wcap-enable-atc-modal:focus{outline:none}.wcap-enable-atc-modal:before{border-radius:50%;background:#fff;content:'';position:absolute;display:block;width:18px;height:18px;top:2px;left:2px;-webkit-transition:all .15s ease;transition:all .15s ease;box-shadow:0 1px 3px rgba(0,0,0,.3)}.wcap-enable-atc-modal[wcap-atc-switch-modal-enable="on"]{box-shadow:inset 0 0 0 11px green}.wcap-enable-atc-modal[wcap-atc-switch-modal-enable="on"]:before{-webkit-transform:translateX(16px);transform:translateX(16px)}.wcap-enable-atc-modal[wcap-atc-switch-modal-enable="off"]{background:#ccc}.wcap-enable-atc-modal.wcap-loading{cursor:default;opacity:.5}.wcap_non_mandatory_text_wrapper{text-align:center}.wcap_non_mandatory_text_wrapper a{text-decoration:none}.wcap-switch-atc-modal-mandatory{cursor:pointer;text-indent:-999em;display:block;width:38px;height:22px;border-radius:30px;border:none;position:relative;box-sizing:border-box;-webkit-transition:all .3s ease;transition:all .3s ease;box-shadow:inset 0 0 0 0 transparent}.wcap-switch-atc-modal-mandatory:focus{outline:none}.wcap-switch-atc-modal-mandatory:before{border-radius:50%;background:#fff;content:'';position:absolute;display:block;width:18px;height:18px;top:2px;left:2px;-webkit-transition:all .15s ease;transition:all .15s ease;box-shadow:0 1px 3px rgba(0,0,0,.3)}.wcap-switch-atc-modal-mandatory[wcap-atc-switch-modal-mandatory="on"]{box-shadow:inset 0 0 0 11px green}.wcap-switch-atc-modal-mandatory[wcap-atc-switch-modal-mandatory="on"]:before{-webkit-transform:translateX(16px);transform:translateX(16px)}.wcap-switch-atc-modal-mandatory[wcap-atc-switch-modal-mandatory="off"]{background:#ccc}.wcap-switch-atc-modal-mandatory.wcap-loading{cursor:default;opacity:.5}.wcap_atc_between_fields_space{margin-top:2%}.wcap_reset_button{margin-left:5%!important}
1
+ .wcap_popup_main_div{width:100%;height:100%}.wcap_popup_main_table{width:100%;height:100%}.wcap_popup_main_table_tr{width:100%;height:100%}.wcap_popup_main_table_td_settings{float:left;width:52%}.wcap_popup_main_table_td_preview{float:right;width:45%}.wcap_heading_section_table{width:100%}.wcap_heading_section_tr{width:100%}.wcap_heading_section_table_heading{float:left}.wcap_heading_section_text_field{float:left;width:52%}.wcap_heading_section_text_field_color{float:right;width:45%}.wcap_heading_section_text_email{width:95%;font-size:1em}.wcap_popup_heading_color_picker{width:40%;font-size:1em}.wcap_text_section_table{width:100%}.wcap_text_section_tr{width:100%}.wcap_text_section_table_heading{float:left}.wcap_text_section_text_field{float:left;width:52%}.wcap_text_section_field_color{float:right;width:45%}.wcap_text_section_input_text{width:95%;font-size:1em}.wcap_popup_text_color_picker{width:40%;font-size:1em}.wcap_email_placeholder_section_table{width:100%}.wcap_email_placeholder_section_tr{width:100%}.wcap_email_placeholder_section_table_heading{float:left}.wcap_email_placeholder_section_text_field{float:left;width:80%}.wcap_email_placeholder_section_input_text{width:95%;font-size:1em}.wcap_button_section_table{width:100%}.wcap_button_section_tr{width:100%}.wcap_button_section_table_heading{float:left}.wcap_button_section_text_field{float:left;width:95%}.wcap_button_section_input_text{width:80%;font-size:1em}.wcap_button_color_section_tr{width:100%}.wcap_button_color_section_text_field{float:left;width:49%}.wcap_button_text_color_section_text_field{float:right;width:50%}.wcap_button_color_picker{width:46%;font-size:1em}.wcap_button_text_color_picker{width:46%;font-size:1em}.wcap_non_mandatory_modal_section_fields_div_table{width:100%}.wcap_non_mandatory_modal_section_fields_tr{width:100%}.wcap_non_mandatory_modal_section_fields_table_heading{float:left}.wcap_non_mandatory_modal_section_fields_text_field{float:left;width:95%}.wcap_non_mandatory_modal_section_fields_input_text{width:80%;font-size:1em}.wcap_template_name{width:200%;font-size:1em}.wcap_container{position:relative;bottom:0;right:0;left:0;background-color:rgba(0,0,0,.7);overflow:auto;background-color:transparent}.wcap_popup_close{position:absolute;top:5px;right:5px;cursor:pointer;color:#bbb;z-index:100;padding:9px;background-size:18px;background-position:center;background-image:url(../../images/atc_cancel_icon.svg);background-repeat:no-repeat}.wcap_container .wcap_popup_heading_container{position:relative;background:#f8f9fb;border-bottom:1px solid #dedede;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;-ms-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;padding-top:18px;padding-bottom:16px;text-align:center}.wcap_container .wcap_popup_content{position:relative;z-index:2;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px}.wcap_container .wcap_popup_content>*{padding-left:18px;padding-right:18px}.wcap_container .wcap_popup_icon{background-image:url(../../images/atc_popup_icon.svg);background-repeat:no-repeat;display:block;background-size:65px;background-position:center;background-color:#fff;background-repeat:no-repeat;border:2px solid #ecedf3;border-radius:50%;margin:0 auto;margin-right:5px;margin-left:2px;position:relative;height:98px;width:98px}.wcap_container .wcap_popup_heading{padding-top:10px;margin:0;font-family:Lato,sans-serif!important;font-size:37px;font-weight:700;line-height:36px;color:#737f97;text-align:center;display:block;text-transform:initial}.wcap_container .wcap_popup_text{color:#bbc9d2;font-size:16px;line-height:20px;font-family:Lato,sans-serif!important;text-align:center;text-transform:initial}.wcap_container .wcap_popup_form{position:relative;text-align:left;font-family:inherit;padding-top:26px;padding-bottom:15px;background-color:#fff!important}.wcap_container div{display:block}.wcap_container .wcap_popup_form:after{content:'';display:block;position:absolute;left:50%;top:-1px;width:0;height:0;margin-left:-16px}.wcap_container .wcap_popup_form:before{content:'';display:block;position:absolute;left:50%;top:-1px;width:0;height:0;margin-left:-16px}.wcap_container .wcap_popup_form:before{left:50%;margin-left:-17px;border-left:17px solid transparent;border-right:17px solid transparent;border-top:17px solid #dedede}.wcap_container .wcap_popup_form:after{border-left:16px solid transparent;border-right:16px solid transparent;border-top:16px solid #f8f9fb}.wcap_container .wcap_popup_input_field_container{position:relative}.wcap_container input[type=text].wcap_popup_input{-webkit-appearance:none;background:#fff!important;border-width:1px!important;border-style:solid!important;border-color:#ccc;color:rgba(0,0,0,.75)!important;display:block;font-family:Lato,sans-serif!important;font-size:18px!important;font-style:normal;line-height:20px!important;margin:0 0 16px 0;padding:8px;height:42px;width:100%;max-width:none!important;margin-bottom:10px;outline:0!important;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px}.wcap_container .wcap_popup_button{position:relative;cursor:pointer;font-family:Lato,sans-serif!important;font-size:20px;font-weight:400;line-height:20px;text-decoration:none;text-align:center;text-shadow:none;text-transform:initial;width:auto;height:auto;min-width:initial;outline:0;display:inline-block;background-color:#228fff;border-top:none!important;border-left:none!important;border-right:none!important;border-bottom:none!important;color:#fff;width:100%;margin:0;padding:10px 0;font-weight:700;cursor:pointer;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;border-radius:5px}.wcap_container .wcap_popup_wrapper{position:relative;top:50%;-webkit-backface-visibility:hidden;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px}.wcap_popup_wrapper{border:1px solid #ebebec}.wcap_container .wcap_popup_plus_sign{background-image:url(../../images/atc_plus_icon.png);background-repeat:no-repeat;background-color:#228fff;background-repeat:no-repeat;background-position:center;background-size:16px;border-radius:50%;height:24px;left:74px;top:-3px;position:absolute;width:24px}@media (min-width:530px){.wcap_container .wcap_popup_icon_container{position:relative;padding-right:6px;display:table-cell;vertical-align:middle;width:105px}.wcap_container .wcap_popup_text_container{display:table-cell;vertical-align:top}.wcap_popup_main_table_td_preview{margin-top:-10%;position:-webkit-sticky;position:sticky;top:0;padding-top:75px}.wcap_container .wcap_popup_text{text-align:left}}.iris-picker{z-index:100;display:none;position:absolute!important;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.2)}.colorpickpreview{padding:5px;padding-left:20px;border:1px solid #ddd;border-right:0;margin-left:-3px}.wcap-enable-atc-modal{cursor:pointer;text-indent:-999em;display:block;width:38px;height:22px;border-radius:30px;border:none;position:relative;box-sizing:border-box;-webkit-transition:all .3s ease;transition:all .3s ease;box-shadow:inset 0 0 0 0 transparent}.wcap-enable-atc-modal:focus{outline:0}.wcap-enable-atc-modal:before{border-radius:50%;background:#fff;content:'';position:absolute;display:block;width:18px;height:18px;top:2px;left:2px;-webkit-transition:all .15s ease;transition:all .15s ease;box-shadow:0 1px 3px rgba(0,0,0,.3)}.wcap-enable-atc-modal[wcap-atc-switch-modal-enable=on]{box-shadow:inset 0 0 0 11px green}.wcap-enable-atc-modal[wcap-atc-switch-modal-enable=on]:before{-webkit-transform:translateX(16px);transform:translateX(16px)}.wcap-enable-atc-modal[wcap-atc-switch-modal-enable=off]{background:#ccc}.wcap-enable-atc-modal.wcap-loading{cursor:default;opacity:.5}.wcap_non_mandatory_text_wrapper{text-align:center}.wcap_non_mandatory_text_wrapper a{text-decoration:none}.wcap-switch-atc-modal-mandatory{cursor:pointer;text-indent:-999em;display:block;width:38px;height:22px;border-radius:30px;border:none;position:relative;box-sizing:border-box;-webkit-transition:all .3s ease;transition:all .3s ease;box-shadow:inset 0 0 0 0 transparent}.wcap-switch-atc-modal-mandatory:focus{outline:0}.wcap-switch-atc-modal-mandatory:before{border-radius:50%;background:#fff;content:'';position:absolute;display:block;width:18px;height:18px;top:2px;left:2px;-webkit-transition:all .15s ease;transition:all .15s ease;box-shadow:0 1px 3px rgba(0,0,0,.3)}.wcap-switch-atc-modal-mandatory[wcap-atc-switch-modal-mandatory=on]{box-shadow:inset 0 0 0 11px green}.wcap-switch-atc-modal-mandatory[wcap-atc-switch-modal-mandatory=on]:before{-webkit-transform:translateX(16px);transform:translateX(16px)}.wcap-switch-atc-modal-mandatory[wcap-atc-switch-modal-mandatory=off]{background:#ccc}.wcap-switch-atc-modal-mandatory.wcap-loading{cursor:default;opacity:.5}.wcap-switch-atc-capture-phone{cursor:pointer;text-indent:-999em;display:block;width:38px;height:22px;border-radius:30px;border:none;position:relative;box-sizing:border-box;-webkit-transition:all .3s ease;transition:all .3s ease;box-shadow:inset 0 0 0 0 transparent}.wcap-switch-atc-capture-phone:focus{outline:0}.wcap-switch-atc-capture-phone:before{border-radius:50%;background:#fff;content:'';position:absolute;display:block;width:18px;height:18px;top:2px;left:2px;-webkit-transition:all .15s ease;transition:all .15s ease;box-shadow:0 1px 3px rgba(0,0,0,.3)}.wcap-switch-atc-capture-phone[wcap-atc-capture-phone=on]{box-shadow:inset 0 0 0 11px green}.wcap-switch-atc-capture-phone[wcap-atc-capture-phone=on]:before{-webkit-transform:translateX(16px);transform:translateX(16px)}.wcap-switch-atc-capture-phone[wcap-atc-capture-phone=off]{background:#ccc}.wcap_phone_placeholder_section_table{width:100%}.wcap_phone_placeholder_section_tr{width:100%}.wcap_phone_placeholder_section_table_heading{float:left}.wcap_phone_placeholder_section_text_field{float:left;width:80%}.wcap_phone_placeholder_section_input_text{width:95%;font-size:1em}.wcap_atc_between_fields_space{margin-top:2%}.wcap_reset_button{margin-left:5%!important}.wcap_coupon_settings_div_table{margin-top:2%;width:100%;height:100%}.wcap_coupon_settings_div_table th{float:left}.wcap-auto-apply-coupons-atc{cursor:pointer;text-indent:-999em;display:block;width:38px;height:22px;border-radius:30px;border:none;position:relative;box-sizing:border-box;-webkit-transition:all .3s ease;transition:all .3s ease;box-shadow:inset 0 0 0 0 transparent}.wcap-auto-apply-coupons-atc:focus{outline:0}.wcap-auto-apply-coupons-atc:before{border-radius:50%;background:#fff;content:'';position:absolute;display:block;width:18px;height:18px;top:2px;left:2px;-webkit-transition:all .15s ease;transition:all .15s ease;box-shadow:0 1px 3px rgba(0,0,0,.3)}.wcap-auto-apply-coupons-atc[wcap-atc-switch-coupon-enable=on]{box-shadow:inset 0 0 0 11px green}.wcap-auto-apply-coupons-atc[wcap-atc-switch-coupon-enable=on]:before{-webkit-transform:translateX(16px);transform:translateX(16px)}.wcap-auto-apply-coupons-atc[wcap-atc-switch-coupon-enable=off]{background:#ccc}.wcap-countdown-timer-cart{cursor:pointer;text-indent:-999em;display:block;width:38px;height:22px;border-radius:30px;border:none;position:relative;box-sizing:border-box;-webkit-transition:all .3s ease;transition:all .3s ease;box-shadow:inset 0 0 0 0 transparent}.wcap-countdown-timer-cart:focus{outline:0}.wcap-countdown-timer-cart:before{border-radius:50%;background:#fff;content:'';position:absolute;display:block;width:18px;height:18px;top:2px;left:2px;-webkit-transition:all .15s ease;transition:all .15s ease;box-shadow:0 1px 3px rgba(0,0,0,.3)}.wcap-countdown-timer-cart[wcap-atc-countdown-timer-cart-enable=on]{box-shadow:inset 0 0 0 11px green}.wcap-countdown-timer-cart[wcap-atc-countdown-timer-cart-enable=on]:before{-webkit-transform:translateX(16px);transform:translateX(16px)}.wcap-countdown-timer-cart[wcap-atc-countdown-timer-cart-enable=off]{background:#ccc}#wcap_countdown_msg{width:70%}#wcap_countdown_msg_expired{width:70%}#wcap_atc_coupon_type{width:77%}.wcap_auto_apply_coupon_id{margin-bottom:-10px}.wcap_coupon_settings_div_table th{margin-top:15px}.options_group{margin-bottom:-10px}#wcap_non_mandatory_modal_section_fields_div{margin-bottom:20px}hr{background-color:#ddd;height:1px;border:0;border-top:1px solid #ddd;border-bottom:1px solid #fafafa}#wcap_coupon_settings{margin-top:-10px}.wcap_atc_content th{font-weight:600;color:#23282d}#wcap_atc_discount_type{width:37%}#wcap_atc_discount_amount{width:37%}#wcap_atc_coupon_validity{width:37%}#wcap_atc_coupon_note{text-align:left;font-weight:400}#sr{width:5%}#wcap-rule-list{width:135%}.wcap_rule_condition_col{width:23%}#wcap_rules_email_addresses{margin-top:10px}td select.wcap_rule_value.wc-product-search{width:90%}td.wcap_rule_type_col{padding:0;width:25%}td.wcap_rule_value_col{width:30%}#wcap-rule-list{padding:0;margin-top:0}#wcap_rule_list_footer{padding:0;border:none}.wcap_rule_list_footer_tr:hover{background-color:transparent!important}.wcap-rule-list{border-collapse:collapse;width:100%}.wcap-rule-list td,.wcap-rule-list th{border:1px solid #ddd;padding:8px}.wcap-rule-list tr:nth-child(even){background-color:#f2f2f2}.wcap-rule-list tr:hover{background-color:#ddd}.wcap-rule-list th{padding-top:12px;padding-bottom:12px;text-align:left;background-color:#2775a6;color:#fff}.wcap_add_rule_button{border:1px solid;border-radius:5px;padding:5px 10px 5px 5px;text-decoration:none;margin-left:5px}.wcap_delete_rule_button{border:1px solid;border-radius:5px;padding:5px}
assets/js/admin/d3.v3.min.js ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ !function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){
2
+ r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){
3
+ return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv(" ","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
4
+ shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0;
5
+ if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}();
assets/js/admin/wcal_adv_dashboard.js CHANGED
@@ -34,4 +34,170 @@ jQuery( document ).ready( function() {
34
  changeYear: true,
35
  dateFormat: "yy-mm-dd" } );
36
 
37
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  changeYear: true,
35
  dateFormat: "yy-mm-dd" } );
36
 
37
+ } );
38
+
39
+ var margin = {top: 20, right: 40, bottom: 80, left: 40},
40
+ width = 980 - margin.left - margin.right,
41
+ height = 500 - margin.top - margin.bottom;
42
+
43
+ var x0 = d3.scale.ordinal().rangeRoundBands([0, width], .4);
44
+ var x1 = d3.scale.ordinal();
45
+
46
+ var y0 = d3.scale.linear().range([height, 0]);
47
+ var y1 = d3.scale.linear().range([height, 0]);
48
+
49
+ var color = d3.scale.ordinal().range(["#98abc5", "#d0743c"]);
50
+
51
+ var xAxis = d3.svg.axis()
52
+ .scale(x0)
53
+ .orient("bottom")
54
+ .ticks(5);
55
+
56
+ var yAxisLeft = d3.svg.axis()
57
+ .scale(y0)
58
+ .orient("left")
59
+ .tickFormat(function(d) { return parseInt(d) });
60
+
61
+ var yAxisRight = d3.svg.axis()
62
+ .scale(y1)
63
+ .orient("right")
64
+ .tickFormat(function(d) { return parseInt(d) });
65
+
66
+ var svg = d3.select(".chartgraph").append("svg")
67
+ .attr("width", width + margin.left + margin.right)
68
+ .attr("height", height + margin.top + margin.bottom)
69
+ .append("g")
70
+ .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
71
+
72
+ var data = wcal_graph_data.data;
73
+ console.log( data );
74
+ var dataset = [];
75
+
76
+ var keyNames = ['abandoned_amount','recovered_amount'];
77
+
78
+ for(i = 0; i < Object.keys(data).length; i++ ) {
79
+ var date = Object.keys(data)[i];
80
+ dataset[i] = {
81
+ date: date,
82
+ values: [
83
+ {name: 'Abandoned Revenue', value: data[date][keyNames[0]]},
84
+ {name: 'Recovered Revenue', value: data[date][keyNames[1]]}
85
+ ]
86
+ };
87
+ }
88
+
89
+ x0.domain(dataset.map(function(d) { return d.date; }));
90
+ x1.domain(['Abandoned Revenue','Recovered Revenue']).rangeRoundBands([0, x0.rangeBand()]);
91
+
92
+ y0.domain([0, d3.max(dataset, function(d) { return d.values[0].value; })]);
93
+ y1.domain([0, d3.max(dataset, function(d) { return d.values[1].value; })]);
94
+
95
+ // Ticks on x-axis and y-axis
96
+ svg.append("g")
97
+ .attr("class", "x axis")
98
+ .attr("transform", "translate(0," + height + ")")
99
+ .call(xAxis)
100
+ .selectAll("text")
101
+ .attr("y", 0)
102
+ .attr("x", 9)
103
+ .attr("dy", ".35em")
104
+ .attr("transform", "rotate(45)")
105
+ .style("text-anchor", "start");
106
+
107
+ svg.append("g")
108
+ .attr("class", "y0 axis")
109
+ .call(yAxisLeft)
110
+ .append("text")
111
+ .attr("transform", "rotate(-90)")
112
+ .attr("y", 6)
113
+ .attr("dy", ".71em")
114
+ .style("text-anchor", "end")
115
+ .style("fill", "#98abc5")
116
+ .text("Abandoned Revenue");
117
+
118
+ svg.select('.y0.axis')
119
+ .selectAll('.tick')
120
+ .style("fill","#98abc5")
121
+ .append("text");
122
+
123
+ svg.append("g")
124
+ .attr("class", "y1 axis")
125
+ .attr("transform", "translate(" + width + ",0)")
126
+ .call(yAxisRight)
127
+ .append("text")
128
+ .attr("transform", "rotate(-90)")
129
+ .attr("y", -16)
130
+ .attr("dy", ".71em")
131
+ .style("text-anchor", "end")
132
+ .style("fill", "#d0743c")
133
+ .text("Recovered Revenue");
134
+
135
+ svg.select('.y1.axis')
136
+ .selectAll('.tick')
137
+ .style("fill","#d0743c");
138
+ // End ticks
139
+
140
+ var graph = svg.selectAll(".date")
141
+ .data(dataset)
142
+ .enter()
143
+ .append("g")
144
+ .attr("class", "g")
145
+ .attr("transform", function(d) { return "translate(" + x0(d.date) + ",0)"; });
146
+
147
+ graph.selectAll("rect")
148
+ .data(function(d) { return d.values; })
149
+ .enter()
150
+ .append("rect")
151
+ .attr("width", x1.rangeBand())
152
+ .attr("x", function(d) { return x1(d.name); })
153
+ .attr("y", function(d) { return y0(d.value); })
154
+ .attr("height", function(d) { return height - y0(d.value); })
155
+ .style("fill", function(d) { return color(d.name); });
156
+
157
+ graph.selectAll("rect")
158
+ .on("mouseover", function(d){
159
+
160
+ var delta = d.value;
161
+
162
+ var xCord = d3.select(this.parentNode).attr("transform");
163
+ xCord = xCord.replace('translate(', '');
164
+ xCord = xCord.replace(',0)', '');
165
+
166
+ var xPos = parseFloat(xCord) + parseFloat(d3.select(this).attr("x"));
167
+ var yPos = parseFloat(d3.select(this).attr("y"));
168
+ var height = parseFloat(d3.select(this).attr("height"))
169
+
170
+ d3.select(this).attr("stroke","blue").attr("stroke-width",0.8);
171
+
172
+ svg.append("text")
173
+ .attr("x",xPos)
174
+ .attr("y",yPos +height/2)
175
+ .attr("class","graph-tooltip")
176
+ .text(d.name +": "+ delta);
177
+
178
+ })
179
+ .on("mouseout",function(){
180
+ svg.select(".graph-tooltip").remove();
181
+ d3.select(this).attr("stroke","pink").attr("stroke-width",0.2);
182
+ })
183
+
184
+ // Legend
185
+ var legend = svg.selectAll(".legend")
186
+ .data(['Abandoned Revenue','Recovered Revenue'].slice())
187
+ .enter()
188
+ .append("g")
189
+ .attr("class", "legend")
190
+ .attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; });
191
+
192
+ legend.append("rect")
193
+ .attr("x", width - 48)
194
+ .attr("width", 18)
195
+ .attr("height", 18)
196
+ .style("fill", color);
197
+
198
+ legend.append("text")
199
+ .attr("x", width - 54)
200
+ .attr("y", 9)
201
+ .attr("dy", ".35em")
202
+ .style("text-anchor", "end")
203
+ .text(function(d) { return d; });
assets/js/admin/wcal_adv_dashboard.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(){jQuery.datepicker.setDefaults(jQuery.datepicker.regional["en-GB"]),jQuery("#wcal_start_date").datepicker({onSelect:function(e){jQuery("#wcal_end_date").datepicker("option","minDate",e),setTimeout(function(){jQuery("#wcal_end_date").datepicker("show")},16)},maxDate:"0",changeMonth:!0,changeYear:!0,dateFormat:"yy-mm-dd"}),jQuery("#duration_select").change(function(){jQuery("#duration_select").val();"custom"==jQuery(this).val()&&(document.getElementById("wcal_start_end_date_div").style.display="block"),"custom"!=jQuery(this).val()&&(document.getElementById("wcal_start_end_date_div").style.display="none")})}),jQuery(document).ready(function(){jQuery("#wcal_end_date").datepicker({maxDate:"0",changeMonth:!0,changeYear:!0,dateFormat:"yy-mm-dd"})});
1
+ jQuery(document).ready(function(){jQuery.datepicker.setDefaults(jQuery.datepicker.regional["en-GB"]),jQuery("#wcal_start_date").datepicker({onSelect:function(t){jQuery("#wcal_end_date").datepicker("option","minDate",t),setTimeout(function(){jQuery("#wcal_end_date").datepicker("show")},16)},maxDate:"0",changeMonth:!0,changeYear:!0,dateFormat:"yy-mm-dd"}),jQuery("#duration_select").change(function(){jQuery("#duration_select").val();"custom"==jQuery(this).val()&&(document.getElementById("wcal_start_end_date_div").style.display="block"),"custom"!=jQuery(this).val()&&(document.getElementById("wcal_start_end_date_div").style.display="none")})}),jQuery(document).ready(function(){jQuery("#wcal_end_date").datepicker({maxDate:"0",changeMonth:!0,changeYear:!0,dateFormat:"yy-mm-dd"})});var margin={top:20,right:40,bottom:80,left:40},width=980-margin.left-margin.right,height=500-margin.top-margin.bottom,x0=d3.scale.ordinal().rangeRoundBands([0,width],.4),x1=d3.scale.ordinal(),y0=d3.scale.linear().range([height,0]),y1=d3.scale.linear().range([height,0]),color=d3.scale.ordinal().range(["#98abc5","#d0743c"]),xAxis=d3.svg.axis().scale(x0).orient("bottom").ticks(5),yAxisLeft=d3.svg.axis().scale(y0).orient("left").tickFormat(function(t){return parseInt(t)}),yAxisRight=d3.svg.axis().scale(y1).orient("right").tickFormat(function(t){return parseInt(t)}),svg=d3.select(".chartgraph").append("svg").attr("width",width+margin.left+margin.right).attr("height",height+margin.top+margin.bottom).append("g").attr("transform","translate("+margin.left+","+margin.top+")"),data=wcal_graph_data.data;console.log(data);var dataset=[],keyNames=["abandoned_amount","recovered_amount"];for(i=0;i<Object.keys(data).length;i++){var date=Object.keys(data)[i];dataset[i]={date:date,values:[{name:"Abandoned Revenue",value:data[date][keyNames[0]]},{name:"Recovered Revenue",value:data[date][keyNames[1]]}]}}x0.domain(dataset.map(function(t){return t.date})),x1.domain(["Abandoned Revenue","Recovered Revenue"]).rangeRoundBands([0,x0.rangeBand()]),y0.domain([0,d3.max(dataset,function(t){return t.values[0].value})]),y1.domain([0,d3.max(dataset,function(t){return t.values[1].value})]),svg.append("g").attr("class","x axis").attr("transform","translate(0,"+height+")").call(xAxis).selectAll("text").attr("y",0).attr("x",9).attr("dy",".35em").attr("transform","rotate(45)").style("text-anchor","start"),svg.append("g").attr("class","y0 axis").call(yAxisLeft).append("text").attr("transform","rotate(-90)").attr("y",6).attr("dy",".71em").style("text-anchor","end").style("fill","#98abc5").text("Abandoned Revenue"),svg.select(".y0.axis").selectAll(".tick").style("fill","#98abc5").append("text"),svg.append("g").attr("class","y1 axis").attr("transform","translate("+width+",0)").call(yAxisRight).append("text").attr("transform","rotate(-90)").attr("y",-16).attr("dy",".71em").style("text-anchor","end").style("fill","#d0743c").text("Recovered Revenue"),svg.select(".y1.axis").selectAll(".tick").style("fill","#d0743c");var graph=svg.selectAll(".date").data(dataset).enter().append("g").attr("class","g").attr("transform",function(t){return"translate("+x0(t.date)+",0)"});graph.selectAll("rect").data(function(t){return t.values}).enter().append("rect").attr("width",x1.rangeBand()).attr("x",function(t){return x1(t.name)}).attr("y",function(t){return y0(t.value)}).attr("height",function(t){return height-y0(t.value)}).style("fill",function(t){return color(t.name)}),graph.selectAll("rect").on("mouseover",function(t){var e=t.value,a=d3.select(this.parentNode).attr("transform");a=(a=a.replace("translate(","")).replace(",0)","");var r=parseFloat(a)+parseFloat(d3.select(this).attr("x")),n=parseFloat(d3.select(this).attr("y")),d=parseFloat(d3.select(this).attr("height"));d3.select(this).attr("stroke","blue").attr("stroke-width",.8),svg.append("text").attr("x",r).attr("y",n+d/2).attr("class","graph-tooltip").text(t.name+": "+e)}).on("mouseout",function(){svg.select(".graph-tooltip").remove(),d3.select(this).attr("stroke","pink").attr("stroke-width",.2)});var legend=svg.selectAll(".legend").data(["Abandoned Revenue","Recovered Revenue"].slice()).enter().append("g").attr("class","legend").attr("transform",function(t,e){return"translate(0,"+20*e+")"});legend.append("rect").attr("x",width-48).attr("width",18).attr("height",18).style("fill",color),legend.append("text").attr("x",width-54).attr("y",9).attr("dy",".35em").style("text-anchor","end").text(function(t){return t});
includes/admin/class-wcap-add-cart-popup-modal.php CHANGED
@@ -27,26 +27,48 @@ if ( ! class_exists( 'Wcap_Add_Cart_Popup_Modal' ) ) {
27
  public static function wcap_add_to_cart_popup_settings() {
28
 
29
  $wcap_atc_enabled = get_option( 'wcap_atc_enable_modal', '' );
30
- $wcap_disabled_field = '';
31
-
32
- if ( 'off' === $wcap_atc_enabled ) {
33
- $wcap_disabled_field = 'disabled="disabled"';
34
- }
35
  ?>
36
 
37
  <div id = "wcap_popup_main_div" class = "wcap_popup_main_div ">
38
  <table id = "wcap_popup_main_table" class = "wcap_popup_main_table test_borders">
39
  <tr id = "wcap_popup_main_table_tr" class = "wcap_popup_main_table_tr test_borders">
40
  <td id = "wcap_popup_main_table_td_settings" class = "wcap_popup_main_table_td_settings test_borders">
41
- <?php self::wcap_enable_modal_section( $wcap_disabled_field ); ?>
42
- <?php self::wcap_custom_pages_section( $wcap_disabled_field ); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  <div class = "wcap_atc_all_fields_container" >
44
- <?php self::wcap_add_heading_section( $wcap_disabled_field ); ?>
45
- <?php self::wcap_add_text_section( $wcap_disabled_field ); ?>
46
- <?php self::wcap_email_placeholder_section( $wcap_disabled_field ); ?>
47
- <?php self::wcap_button_section( $wcap_disabled_field ); ?>
48
- <?php self::wcap_mandatory_modal_section( $wcap_disabled_field ); ?>
49
- <?php self::wcap_non_mandatory_modal_section_field( $wcap_disabled_field ); ?>
 
 
 
 
50
  </div>
51
  </td>
52
  <td id = "wcap_popup_main_table_td_preview" class = "wcap_popup_main_table_td_preview test_borders">
@@ -78,7 +100,7 @@ if ( ! class_exists( 'Wcap_Add_Cart_Popup_Modal' ) ) {
78
  */
79
  public static function wcap_enable_modal_section( $wcap_disabled_field ) {
80
  ?>
81
- <table class = "wcap_enable_atc wcap_atc_between_fields_space" id = "wcap_enable_atc" >
82
  <th id = "wcap_button_section_table_heading" class = "wcap_button_section_table_heading"> <?php echo esc_html_e( 'Enable Add to cart popup modal', 'woocommerce-abandoned-cart' ); ?> </th>
83
  <tr>
84
  <td>
@@ -90,73 +112,26 @@ if ( ! class_exists( 'Wcap_Add_Cart_Popup_Modal' ) ) {
90
  <?php
91
  }
92
 
93
- /**
94
- * Adds a multi select searchable dropdown from where
95
- * the admin can select custom pages on which the
96
- * Add to Cart Popup modal should be displayed.
97
- *
98
- * @param string $wcap_disabled_field It will indicate if field need to be disabled or not.
99
- * @since 7.10.0
100
- */
101
- public static function wcap_custom_pages_section( $wcap_disabled_field ) {
102
-
103
- global $woocommerce;
104
- $post_title_array = array();
105
- ?>
106
-
107
- <table class = "wcap_custom_pages wcap_atc_between_fields_space" id = "wcap_custom_pages" >
108
- <tr>
109
- <th id="wcap_button_section_table_heading" class="wcap_button_section_table_heading"> <?php echo esc_html_e( 'Custom pages to display the pop-up modal on', 'woocommerce-abandoned-cart' ); ?> </th>
110
- </tr>
111
- <tr>
112
- <td>
113
- <?php
114
- $custom_pages = get_option( 'wcap_custom_pages_list' );
115
- ?>
116
- <?php if ( $woocommerce->version >= '3.0' ) { ?>
117
- <select style="width:80%" multiple="multiple" class="wcap_page_select wc-product-search" name="wcap_page_select[]" data-placeholder='<?php esc_attr__( 'Search for a Page&hellip;', 'woocommerce-abandoned-cart' ); ?>' data-action='wcap_json_find_pages' disabled>
118
- </select>
119
- <?php
120
- } else {
121
- ?>
122
- <input type="hidden" style="width:80%" id = "wcap_page_select" class="wc-product-search" name="wcap_page_select[]" data-placeholder='<?php esc_attr_e( 'Search for a Page&hellip;', 'woocommerce-abandoned-cart' ); ?>' data-multiple="true" data-action='wcap_json_find_pages' data-selected="" value="" readonly/>
123
- <?php
124
- }
125
- ?>
126
- <?php $tool_tip = __( 'Please add any custom pages (not created by WooCommerce) where you wish to display the Add to cart Pop-up Modal.', 'woocommerce-abandoned-cart' ); ?>
127
- <?php echo wp_kses_post( wc_help_tip( $tool_tip ) ); ?>
128
- </td>
129
- </tr>
130
- <tr>
131
- <td colspan="2" style="text-align: justify;">
132
- <b><?php echo esc_html_e( 'Note: ', 'woocommerce-abandoned-cart' ); ?></b><?php echo esc_html_e( 'Please ensure that the Add to Cart button links on these pages are added with the correct classes and attributes to ensure the plugin can capture the cart data correctly. For further guidance, please check the documentation.', 'woocommerce-abandoned-cart' ); ?>
133
- </td>
134
- </tr>
135
- </table>
136
-
137
- <?php
138
- }
139
-
140
  /**
141
  * It will add the setting for Heading section on the add to cart modal settings page.
142
  *
143
- * @param string $wcap_disabled_field It will indicate if field need to be disabled or not.
144
  * @since 6.0
145
  */
146
- public static function wcap_add_heading_section( $wcap_disabled_field ) {
 
147
  ?>
148
-
149
- <div id = "wcap_heading_section_div" class = "wcap_heading_section_div wcap_atc_between_fields_space">
150
- <table id = "wcap_heading_section_table" class = "wcap_heading_section_table">
151
- <th id = "wcap_heading_section_table_heading" class ="wcap_heading_section_table_heading"> Modal Heading </th>
152
- <tr id = "wcap_heading_section_tr" class = "wcap_heading_section_tr" >
153
- <td id = "wcap_heading_section_text_field" class = "wcap_heading_section_text_field test_borders">
154
- <input id = "wcap_heading_section_text_email" v-model = "wcap_heading_section_text_email" name = "wcap_heading_section_text_email"class = "wcap_heading_section_text_email"
155
- readonly value="<?php echo esc_html_e( 'Please enter your email address', 'woocommerce-abandoned-cart' ); ?>">
156
- </td>
157
- <td id = "wcap_heading_section_text_field_color" class = "wcap_heading_section_text_field_color test_borders">
158
- <span class = "colorpickpreview" style = "background: #737f97"></span>
159
- <input class = "wcap_popup_heading_color_picker colorpick" name = "wcap_popup_heading_color_picker" value = "#737f97" v-model = "wcap_popup_heading_color" v-on:input = "wcap_atc_popup_heading.color = $event.target.value" readonly >
160
  </td>
161
  </tr>
162
  </table>
@@ -167,21 +142,21 @@ if ( ! class_exists( 'Wcap_Add_Cart_Popup_Modal' ) ) {
167
  /**
168
  * It will add the setting for Text displayed below heading section on the add to cart modal settings page.
169
  *
170
- * @param string $wcap_disabled_field It will indicate if field need to be disabled or not.
171
  * @since 6.0
172
  */
173
- public static function wcap_add_text_section( $wcap_disabled_field ) {
174
  ?>
175
- <div id = "wcap_text_section_div" class = "wcap_text_section_div wcap_atc_between_fields_space">
176
- <table id = "wcap_text_section_table" class = "wcap_text_section_table">
177
- <th id = "wcap_text_section_table_heading" class = "wcap_text_section_table_heading"> Modal Text </th>
178
- <tr id = "wcap_text_section_tr" class = "wcap_text_section_tr" >
179
- <td id = "wcap_text_section_text_field" class = "wcap_text_section_text_field test_borders">
180
- <input id = "wcap_text_section_text" v-model = "wcap_text_section_text_field" class="wcap_text_section_input_text" name = "wcap_text_section_text" readonly value="<?php echo esc_html_e( 'To add this item to your cart, please enter your email address.', 'woocommerce-abandoned-cart' ); ?>">
181
- </td>
182
- <td id = "wcap_text_section_field_color" class = "wcap_text_section_field_color test_borders">
183
- <span class = "colorpickpreview" style = "background: #bbc9d2"></span>
184
- <input class = "wcap_popup_text_color_picker colorpick" name = "wcap_popup_text_color_picker" value = "#bbc9d2" v-model = "wcap_popup_text_color" v-on:input = "wcap_atc_popup_text.color = $event.target.value" readonly>
185
  </td>
186
  </tr>
187
  </table>
@@ -192,19 +167,17 @@ if ( ! class_exists( 'Wcap_Add_Cart_Popup_Modal' ) ) {
192
  /**
193
  * It will add the setting for email placeholder on the add to cart modal settings page.
194
  *
195
- * @param string $wcap_disabled_field It will indicate if field need to be disabled or not.
196
  * @since 6.0
197
  */
198
- public static function wcap_email_placeholder_section( $wcap_disabled_field ) {
199
  ?>
200
-
201
- <div id = "wcap_email_placeholder_section_div" class = "wcap_email_placeholder_section_div wcap_atc_between_fields_space">
202
- <table id = "wcap_email_placeholder_section_table" class = "wcap_email_placeholder_section_table">
203
- <th id = "wcap_email_placeholder_section_table_heading" class = "wcap_email_placeholder_section_table_heading"> Email placeholder </th>
204
- <tr id = "wcap_email_placeholder_section_tr" class = "wcap_email_placeholder_section_tr" >
205
- <td id = "wcap_email_placeholder_section_text_field" class = "wcap_email_placeholder_section_text_field test_borders">
206
- <input id = "wcap_email_placeholder_section_input_text" v-model = "wcap_email_placeholder_section_input_text" class="wcap_email_placeholder_section_input_text" name = "wcap_email_placeholder_section_input_text"
207
- readonly value="<?php echo esc_html_e( 'Email address', 'woocommerce-abandoned-cart' ); ?>">
208
  </td>
209
  </tr>
210
  </table>
@@ -215,31 +188,27 @@ if ( ! class_exists( 'Wcap_Add_Cart_Popup_Modal' ) ) {
215
  /**
216
  * It will add the setting for Add to cart button on the add to cart modal settings page.
217
  *
218
- * @param string $wcap_disabled_field It will indicate if field need to be disabled or not.
219
  * @since 6.0
220
  */
221
- public static function wcap_button_section( $wcap_disabled_field ) {
222
  ?>
223
-
224
- <div id = "wcap_button_section_div" class = "wcap_button_section_div wcap_atc_between_fields_space">
225
-
226
- <table id = "wcap_button_section_table" class = "wcap_button_section_table">
227
- <th id = "wcap_button_section_table_heading" class="wcap_button_section_table_heading"> Add to cart button text </th>
228
  <tr>
229
- <td id = "wcap_button_section_text_field" class = "wcap_button_section_text_field test_borders">
230
- <input id = "wcap_button_section_input_text" v-model = "wcap_button_section_input_text" class="wcap_button_section_input_text" name = "wcap_button_section_input_text"
231
- readonly value="<?php echo esc_html_e( 'Add to Cart', 'woocommerce-abandoned-cart' ); ?>">
232
  </td>
233
  </tr>
234
-
235
- <tr id = "wcap_button_color_section_tr" class = "wcap_button_color_section_tr">
236
- <td id = "wcap_button_color_section_text_field" class = "wcap_button_color_section_text_field test_borders">
237
- <span class = "colorpickpreview" style = "background: #0085ba"></span>
238
- <input id = "wcap_button_color_picker" value = "#0085ba" v-model ="wcap_button_bg_color" v-on:input="wcap_atc_button.backgroundColor = $event.target.value" class="wcap_button_color_picker colorpick" name = "wcap_button_color_picker" readonly >
239
  </td>
240
- <td id = "wcap_button_text_color_section_text_field" class = "wcap_button_text_color_section_text_field test_borders">
241
- <span class = "colorpickpreview" style = "background: #ffffff"></span>
242
- <input id = "wcap_button_text_color_picker" value = "#ffffff" v-model = "wcap_button_text_color" v-on:input = "wcap_atc_button.color = $event.target.value" class="wcap_button_text_color_picker colorpick" name = "wcap_button_text_color_picker" readonly>
243
  </td>
244
  </tr>
245
  </table>
@@ -250,18 +219,19 @@ if ( ! class_exists( 'Wcap_Add_Cart_Popup_Modal' ) ) {
250
  /**
251
  * It will add the setting for Email address mandatory field on the add to cart modal settings page.
252
  *
253
- * @param string $wcap_disabled_field It will indicate if field need to be disabled or not.
254
  * @since 6.0
255
  */
256
- public static function wcap_mandatory_modal_section( $wcap_disabled_field ) {
257
  ?>
258
-
259
- <table class = "wcap_atc_between_fields_space">
260
- <th id = "wcap_button_section_table_heading" class = "wcap_button_section_table_heading"> Email address is mandatory ? </th>
261
  <tr>
262
  <td>
263
- <button type = "button" class = "wcap-switch-atc-modal-mandatory wcap-toggle-atc-modal-mandatory" wcap-atc-switch-modal-mandatory = 'off' readonly >
 
264
  </button>
 
265
  </td>
266
  </tr>
267
  </table>
@@ -271,18 +241,61 @@ if ( ! class_exists( 'Wcap_Add_Cart_Popup_Modal' ) ) {
271
  /**
272
  * It will add the setting for Email address non mandatory field on the add to cart modal settings page.
273
  *
274
- * @param string $wcap_disabled_field It will indicate if field need to be disabled or not.
275
  * @since 6.0
276
  */
277
- public static function wcap_non_mandatory_modal_section_field( $wcap_disabled_field ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
278
  ?>
279
- <div id = "wcap_non_mandatory_modal_section_fields_div" class = "wcap_non_mandatory_modal_section_fields_div wcap_atc_between_fields_space">
280
- <table id = "wcap_non_mandatory_modal_section_fields_div_table" class = "wcap_non_mandatory_modal_section_fields_div_table">
281
- <th id = "wcap_non_mandatory_modal_section_fields_table_heading"
282
- class="wcap_non_mandatory_modal_section_fields_table_heading"> Not mandatory text </th>
283
- <tr id = "wcap_non_mandatory_modal_section_fields_tr" class = "wcap_non_mandatory_modal_section_fields_tr" >
284
- <td id = "wcap_non_mandatory_modal_section_fields_text_field" class = "wcap_non_mandatory_modal_section_fields_text_field test_borders">
285
- <input id = "wcap_non_mandatory_modal_section_fields_input_text" v-model = "wcap_non_mandatory_modal_input_text" class = "wcap_non_mandatory_modal_section_fields_input_text" name = "wcap_non_mandatory_modal_section_fields_input_text" readonly value="<?php echo esc_html_e( 'No Thanks', 'woocommerce-abandoned-cart' ); ?>" >
286
  </td>
287
  </tr>
288
  </table>
@@ -290,6 +303,151 @@ if ( ! class_exists( 'Wcap_Add_Cart_Popup_Modal' ) ) {
290
  <?php
291
  }
292
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
293
  /**
294
  * It will will show th preview of the Add To cart Popup modal with the changes made on any of the settings for it.
295
  *
@@ -321,6 +479,9 @@ if ( ! class_exists( 'Wcap_Add_Cart_Popup_Modal' ) ) {
321
  <div class = "wcap_popup_input_field_container" >
322
  <input class = "wcap_popup_input" type = "text" value = "" name = "email" placeholder ="<?php echo esc_html_e( 'Email address', 'woocommerce-abandoned-cart' ); ?>" readonly >
323
  </div>
 
 
 
324
  <button class = "wcap_popup_button" v-bind:style = "wcap_atc_button"><?php echo esc_html_e( 'Add to Cart', 'woocommerce-abandoned-cart' ); ?></button>
325
  <br>
326
  <br>
27
  public static function wcap_add_to_cart_popup_settings() {
28
 
29
  $wcap_atc_enabled = get_option( 'wcap_atc_enable_modal', '' );
30
+ $wcap_disabled_field = 'off' === $wcap_atc_enabled ? 'disabled="disabled"' : '';
31
+ $frontend_settings = (object) array();
32
+ $coupon_settings = (object) array();
 
 
33
  ?>
34
 
35
  <div id = "wcap_popup_main_div" class = "wcap_popup_main_div ">
36
  <table id = "wcap_popup_main_table" class = "wcap_popup_main_table test_borders">
37
  <tr id = "wcap_popup_main_table_tr" class = "wcap_popup_main_table_tr test_borders">
38
  <td id = "wcap_popup_main_table_td_settings" class = "wcap_popup_main_table_td_settings test_borders">
39
+ <?php self::wcap_enable_modal_section( $frontend_settings ); ?>
40
+ <hr>
41
+ </td>
42
+ </tr>
43
+ <tr id="wcap_popup_main_table_tr" class="wcap_popup_main_table_tr test_borders">
44
+ <td id="wcap_popup_main_table_td_settings" class="wcap_popup_main_table_td_settings test_borders">
45
+ <?php
46
+ wc_get_template(
47
+ 'html-atc-rules-engine.php',
48
+ array(
49
+ 'rules' => array(),
50
+ 'match' => '',
51
+ ),
52
+ 'woocommerce-abandoned-cart/',
53
+ WCAL_PLUGIN_PATH . '/includes/templates/atc-rules/'
54
+ );
55
+ ?>
56
+ <hr>
57
+ </td>
58
+ </tr>
59
+ <tr id="wcap_popup_main_table_tr" class="wcap_popup_main_table_tr test_borders">
60
+ <td id="wcap_popup_main_table_td_settings" class="wcap_popup_main_table_td_settings test_borders">
61
  <div class = "wcap_atc_all_fields_container" >
62
+ <?php self::wcap_add_heading_section( $frontend_settings ); ?>
63
+ <?php self::wcap_add_text_section( $frontend_settings ); ?>
64
+ <?php self::wcap_email_placeholder_section( $frontend_settings ); ?>
65
+ <?php self::wcap_button_section( $frontend_settings ); ?>
66
+ <?php self::wcap_mandatory_modal_section( $frontend_settings ); ?>
67
+ <?php self::wcap_non_mandatory_modal_section_field( $frontend_settings ); ?>
68
+ <?php self::wcap_capture_phone( $frontend_settings ); ?>
69
+ <?php self::wcap_phone_placeholder_section( $frontend_settings ); ?>
70
+ <hr>
71
+ <?php self::wcap_coupon_section( $coupon_settings ); ?>
72
  </div>
73
  </td>
74
  <td id = "wcap_popup_main_table_td_preview" class = "wcap_popup_main_table_td_preview test_borders">
100
  */
101
  public static function wcap_enable_modal_section( $wcap_disabled_field ) {
102
  ?>
103
+ <table class = "wcap_enable_atc wcap_atc_between_fields_space wcap_atc_content" id = "wcap_enable_atc" >
104
  <th id = "wcap_button_section_table_heading" class = "wcap_button_section_table_heading"> <?php echo esc_html_e( 'Enable Add to cart popup modal', 'woocommerce-abandoned-cart' ); ?> </th>
105
  <tr>
106
  <td>
112
  <?php
113
  }
114
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
  /**
116
  * It will add the setting for Heading section on the add to cart modal settings page.
117
  *
118
+ * @param object $frontend_settings - ATC settings.
119
  * @since 6.0
120
  */
121
+ public static function wcap_add_heading_section( $frontend_settings ) {
122
+ $heading = isset( $frontend_settings->wcap_heading_section_text_email ) ? $frontend_settings->wcap_heading_section_text_email : __( 'Please enter your email.', 'woocommerce-abandoned-cart' );
123
  ?>
124
+ <div id="wcap_heading_section_div" class="wcap_heading_section_div wcap_atc_between_fields_space">
125
+ <table id="wcap_heading_section_table" class="wcap_heading_section_table wcap_atc_content">
126
+ <th id="wcap_heading_section_table_heading" class="wcap_heading_section_table_heading"><?php esc_html_e( 'Modal Heading', 'woocommerce-abandoned-cart' ); ?></th>
127
+ <tr id="wcap_heading_section_tr" class="wcap_heading_section_tr" >
128
+ <td id="wcap_heading_section_text_field" class="wcap_heading_section_text_field test_borders">
129
+ <input type="text" id="wcap_heading_section_text_email" v-model="wcap_heading_section_text_email" name="wcap_heading_section_text_email" class = "wcap_heading_section_text_email"
130
+ readonly value="<?php echo esc_html( $heading ); ?>" >
131
+ </td>
132
+ <td id="wcap_heading_section_text_field_color" class="wcap_heading_section_text_field_color test_borders">
133
+ <span class = "colorpickpreview" style = "background: #737d97"></span>
134
+ <input type="text" class="wcap_popup_heading_color_picker colorpick" name="wcap_popup_heading_color_picker" value="#737f97" v-model="wcap_popup_heading_color" v-on:input="wcap_atc_popup_heading.color = $event.target.value" readonly >
 
135
  </td>
136
  </tr>
137
  </table>
142
  /**
143
  * It will add the setting for Text displayed below heading section on the add to cart modal settings page.
144
  *
145
+ * @param object $frontend_settings - ATC settings.
146
  * @since 6.0
147
  */
148
+ public static function wcap_add_text_section( $frontend_settings ) {
149
  ?>
150
+ <div id="wcap_text_section_div" class="wcap_text_section_div wcap_atc_between_fields_space">
151
+ <table id="wcap_text_section_table" class="wcap_text_section_table wcap_atc_content">
152
+ <th id="wcap_text_section_table_heading" class="wcap_text_section_table_heading"><?php esc_html_e( 'Modal Text', 'woocommerce-abandoned-cart' ); ?></th>
153
+ <tr id="wcap_text_section_tr" class="wcap_text_section_tr" >
154
+ <td id="wcap_text_section_text_field" class="wcap_text_section_text_field test_borders">
155
+ <input type="text" id="wcap_text_section_text" v-model="wcap_text_section_text_field" class="wcap_text_section_input_text" name="wcap_text_section_text" readonly>
156
+ </td>
157
+ <td id="wcap_text_section_field_color" class="wcap_text_section_field_color test_borders">
158
+ <span class="colorpickpreview" style="background: #bbc9d2"></span>
159
+ <input type="text" class="wcap_popup_text_color_picker colorpick" name="wcap_popup_text_color_picker" value="#bbc9d2" v-model="wcap_popup_text_color" v-on:input="wcap_atc_popup_text.color = $event.target.value" readonly>
160
  </td>
161
  </tr>
162
  </table>
167
  /**
168
  * It will add the setting for email placeholder on the add to cart modal settings page.
169
  *
170
+ * @param object $frontend_settings - ATC settings.
171
  * @since 6.0
172
  */
173
+ public static function wcap_email_placeholder_section( $frontend_settings ) {
174
  ?>
175
+ <div id="wcap_email_placeholder_section_div" class="wcap_email_placeholder_section_div wcap_atc_between_fields_space">
176
+ <table id="wcap_email_placeholder_section_table" class="wcap_email_placeholder_section_table wcap_atc_content">
177
+ <th id="wcap_email_placeholder_section_table_heading" class="wcap_email_placeholder_section_table_heading"><?php esc_html_e( 'Email placeholder', 'woocommerce-abandoned-cart' ); ?></th>
178
+ <tr id="wcap_email_placeholder_section_tr" class="wcap_email_placeholder_section_tr" >
179
+ <td id="wcap_email_placeholder_section_text_field" class="wcap_email_placeholder_section_text_field test_borders">
180
+ <input type="text" id="wcap_email_placeholder_section_input_text" v-model="wcap_email_placeholder_section_input_text" class="wcap_email_placeholder_section_input_text" name="wcap_email_placeholder_section_input_text" readonly>
 
 
181
  </td>
182
  </tr>
183
  </table>
188
  /**
189
  * It will add the setting for Add to cart button on the add to cart modal settings page.
190
  *
191
+ * @param object $frontend_settings - ATC settings.
192
  * @since 6.0
193
  */
194
+ public static function wcap_button_section( $frontend_settings ) {
195
  ?>
196
+ <div id="wcap_button_section_div" class="wcap_button_section_div wcap_atc_between_fields_space">
197
+ <table id="wcap_button_section_table" class="wcap_button_section_table wcap_atc_content">
198
+ <th id="wcap_button_section_table_heading" class="wcap_button_section_table_heading"><?php esc_html_e( 'Add to cart button text', 'woocommerce-abandoned-cart' ); ?></th>
 
 
199
  <tr>
200
+ <td id="wcap_button_section_text_field" class="wcap_button_section_text_field test_borders">
201
+ <input type="text" id="wcap_button_section_input_text" v-model="wcap_button_section_input_text" class="wcap_button_section_input_text" name="wcap_button_section_input_text" readonly>
 
202
  </td>
203
  </tr>
204
+ <tr id="wcap_button_color_section_tr" class="wcap_button_color_section_tr">
205
+ <td id="wcap_button_color_section_text_field" class="wcap_button_color_section_text_field test_borders">
206
+ <span class="colorpickpreview" style="background: #0085ba"></span>
207
+ <input type="text" id="wcap_button_color_picker" value="#0085ba" v-model="wcap_button_bg_color" v-on:input="wcap_atc_button.backgroundColor = $event.target.value" class="wcap_button_color_picker colorpick" name="wcap_button_color_picker" readonly>
 
208
  </td>
209
+ <td id="wcap_button_text_color_section_text_field" class="wcap_button_text_color_section_text_field test_borders">
210
+ <span class="colorpickpreview" style="background: #ffffff"></span>
211
+ <input type="text" id="wcap_button_text_color_picker" value= "#ffffff" v-model="wcap_button_text_color" v-on:input="wcap_atc_button.color = $event.target.value" class="wcap_button_text_color_picker colorpick" name="wcap_button_text_color_picker" readonly>
212
  </td>
213
  </tr>
214
  </table>
219
  /**
220
  * It will add the setting for Email address mandatory field on the add to cart modal settings page.
221
  *
222
+ * @param object $frontend_settings - ATC settings.
223
  * @since 6.0
224
  */
225
+ public static function wcap_mandatory_modal_section( $frontend_settings ) {
226
  ?>
227
+ <table class="wcap_atc_between_fields_space wcap_atc_content">
228
+ <th id="wcap_button_section_table_heading" class="wcap_button_section_table_heading"><?php esc_html_e( 'Email address is mandatory?', 'woocommerce-abandoned-cart' ); ?></th>
 
229
  <tr>
230
  <td>
231
+ <button type="button" class="wcap-switch-atc-modal-mandatory wcap-toggle-atc-modal-mandatory" wcap-atc-switch-modal-mandatory="off"
232
+ onClick="wcap_button_choice( this, 'wcap-atc-switch-modal-mandatory' )" readonly>
233
  </button>
234
+ <input type="hidden" name="wcap_switch_atc_modal_mandatory" id="wcap_switch_atc_modal_mandatory" readonly/>
235
  </td>
236
  </tr>
237
  </table>
241
  /**
242
  * It will add the setting for Email address non mandatory field on the add to cart modal settings page.
243
  *
244
+ * @param object $frontend_settings - ATC settings.
245
  * @since 6.0
246
  */
247
+ public static function wcap_non_mandatory_modal_section_field( $frontend_settings ) {
248
+ ?>
249
+ <div id="wcap_non_mandatory_modal_section_fields_div" class="wcap_non_mandatory_modal_section_fields_div wcap_atc_between_fields_space">
250
+ <table id="wcap_non_mandatory_modal_section_fields_div_table" class="wcap_non_mandatory_modal_section_fields_div_table wcap_atc_content">
251
+ <th id="wcap_non_mandatory_modal_section_fields_table_heading"
252
+ class="wcap_non_mandatory_modal_section_fields_table_heading"><?php esc_html_e( 'Not mandatory text', 'woocommerce-abandoned-cart' ); ?></th>
253
+ <tr id="wcap_non_mandatory_modal_section_fields_tr" class="wcap_non_mandatory_modal_section_fields_tr" >
254
+ <td id="wcap_non_mandatory_modal_section_fields_text_field" class="wcap_non_mandatory_modal_section_fields_text_field test_borders">
255
+ <input type="text" id="wcap_non_mandatory_modal_section_fields_input_text" v-model="wcap_non_mandatory_modal_input_text" class="wcap_non_mandatory_modal_section_fields_input_text" name="wcap_non_mandatory_modal_section_fields_input_text" readonly>
256
+ </td>
257
+ </tr>
258
+ </table>
259
+ </div>
260
+ <?php
261
+ }
262
+
263
+ /**
264
+ * It will add the setting for Phone capture on the add to cart modal settings page.
265
+ *
266
+ * @param object $frontend_settings - ATC settings.
267
+ * @since 8.12.0
268
+ */
269
+ public static function wcap_capture_phone( $frontend_settings ) {
270
+ ?>
271
+ <table class="wcap_atc_between_fields_space wcap_atc_content">
272
+ <th id="wcap_button_section_table_heading" class="wcap_button_section_table_heading"><?php esc_html_e( 'Capture Phone', 'woocommerce-abandoned-cart' ); ?></th>
273
+ <tr>
274
+ <td>
275
+ <button type="button" class="wcap-switch-atc-capture-phone wcap-toggle-atc-capture-phone" wcap-atc-capture-phone="off"
276
+ onClick="wcap_button_choice( this, 'wcap-atc-capture-phone' )" readonly>
277
+ </button>
278
+ <input type="hidden" name="wcap_switch_atc_capture_phone" id="wcap_switch_atc_capture_phone" value="off" readonly/>
279
+ </td>
280
+ </tr>
281
+ </table>
282
+ <?php
283
+ }
284
+
285
+ /**
286
+ * It will add the setting for Phone field placeholder on the add to cart modal settings page.
287
+ *
288
+ * @param object $frontend_settings - ATC settings.
289
+ * @since 8.12.0
290
+ */
291
+ public static function wcap_phone_placeholder_section( $frontend_settings ) {
292
  ?>
293
+ <div id="wcap_phone_placeholder_section_div" class="wcap_phone_placeholder_section_div wcap_atc_between_fields_space">
294
+ <table id="wcap_phone_placeholder_section_table" class="wcap_phone_placeholder_section_table wcap_atc_content">
295
+ <th id="wcap_phone_placeholder_section_table_heading" class="wcap_phone_placeholder_section_table_heading"><?php esc_html_e( 'Phone placeholder', 'woocommerce-abandoned-cart' ); ?></th>
296
+ <tr id="wcap_phone_placeholder_section_tr" class="wcap_phone_placeholder_section_tr" >
297
+ <td id="wcap_phone_placeholder_section_text_field" class="wcap_phone_placeholder_section_text_field test_borders">
298
+ <input type="text" id="wcap_phone_placeholder_section_input_text" v-model="wcap_phone_placeholder_section_input_text" class="wcap_phone_placeholder_section_input_text" name="wcap_phone_placeholder_section_input_text" value="<?php esc_html_e( 'Please enter your phone number in E.164 format', 'woocommerce-abandoned-cart' ); ?>" readonly >
 
299
  </td>
300
  </tr>
301
  </table>
303
  <?php
304
  }
305
 
306
+ /**
307
+ * Auto Apply coupons for atc settings.
308
+ *
309
+ * @param object $coupon_settings - Coupon settings.
310
+ * @since 8.5.0
311
+ */
312
+ public static function wcap_coupon_section( $coupon_settings ) {
313
+ $auto_apply_coupon = isset( $coupon_settings->wcap_atc_auto_apply_coupon_enabled ) ? $coupon_settings->wcap_atc_auto_apply_coupon_enabled : 'off';
314
+ $active_text = __( $auto_apply_coupon, 'woocommerce-abandoned-cart' ); // phpcs:ignore
315
+
316
+ $wcap_atc_coupon_type = isset( $coupon_settings->wcap_atc_coupon_type ) ? $coupon_settings->wcap_atc_coupon_type : '';
317
+ $pre_selected = 'pre-selected' === $wcap_atc_coupon_type || '' === $wcap_atc_coupon_type ? 'selected' : '';
318
+ $unique = 'unique' === $wcap_atc_coupon_type ? 'selected' : '';
319
+
320
+ $coupon_code_id = isset( $coupon_settings->wcap_atc_popup_coupon ) ? $coupon_settings->wcap_atc_popup_coupon : 0;
321
+
322
+ $wcap_atc_discount_type = isset( $coupon_settings->wcap_atc_discount_type ) ? $coupon_settings->wcap_atc_discount_type : '';
323
+ $percent_discount = 'percent' === $wcap_atc_discount_type || '' === $wcap_atc_discount_type ? 'selected' : '';
324
+ $amount_discount = 'amount' === $wcap_atc_discount_type ? 'selected' : '';
325
+
326
+ $wcap_atc_discount_amount = isset( $coupon_settings->wcap_atc_discount_amount ) ? $coupon_settings->wcap_atc_discount_amount : '';
327
+ $wcap_atc_coupon_free_shipping = isset( $coupon_settings->wcap_atc_coupon_free_shipping ) ? $coupon_settings->wcap_atc_coupon_free_shipping : '';
328
+ $free_shipping_enabled = 'on' === $wcap_atc_coupon_free_shipping ? 'checked' : '';
329
+
330
+ $coupon_validity = isset( $coupon_settings->wcap_atc_popup_coupon_validity ) ? $coupon_settings->wcap_atc_popup_coupon_validity : '';
331
+ $countdown_msg = isset( $coupon_settings->wcap_countdown_timer_msg ) ? htmlspecialchars_decode( $coupon_settings->wcap_countdown_timer_msg ) : htmlspecialchars_decode( 'Coupon <coupon_code> expires in <hh:mm:ss>. Avail it now.' );
332
+ $countdown_msg_expired = isset( $coupon_settings->wcap_countdown_msg_expired ) ? $coupon_settings->wcap_countdown_msg_expired : 'The offer is no longer valid.';
333
+ $countdown_cart = isset( $coupon_settings->wcap_countdown_cart ) ? $coupon_settings->wcap_countdown_cart : 'on';
334
+ $active_cart = __( $countdown_cart, 'woocommerce-abandoned-cart' ); // phpcs:ignore
335
+ ?>
336
+ <div id='wcap_coupon_settings'>
337
+ <table id='wcap_coupon_settings_div_table' class='wcap_coupon_settings_div_table wcap_atc_content'>
338
+ <th id='wcap_auto_apply_coupons_heading' class='wcap_auto_apply_coupons_heading'><?php esc_html_e( 'Auto apply coupons on email address capture:', 'woocommerce-abandoned-cart' ); ?></th>
339
+ <tr>
340
+ <td>
341
+ <button type="button" class="wcap-auto-apply-coupons-atc wcap-toggle-auto-apply-coupons-status" wcap-atc-switch-coupon-enable = "<?php echo esc_attr( $auto_apply_coupon ); ?>"
342
+ onClick="wcap_button_choice( this, 'wcap-atc-switch-coupon-enable' )" readonly disabled >
343
+ <?php echo esc_attr( $active_text ); ?></button>
344
+ <input type="hidden" name="wcap_auto_apply_coupons_atc" id="wcap_auto_apply_coupons_atc" value="<?php echo esc_attr( $auto_apply_coupon ); ?>" readonly disabled/>
345
+ </td>
346
+ </tr>
347
+ <th id='wcap_atc_coupon_type_label' class='wcap_atc_coupon_type_label'><?php esc_html_e( 'Type of Coupon to apply:', 'woocommerce-abandoned-cart' ); ?></th>
348
+ <tr>
349
+ <td>
350
+ <select id='wcap_atc_coupon_type' name='wcap_atc_coupon_type' readonly disabled>
351
+ <option value='pre-selected' <?php echo esc_html( $pre_selected ); ?>><?php esc_html_e( 'Existing Coupons', 'woocommerce-abandoned-cart' ); ?></option>
352
+ <option value='unique' <?php echo esc_html( $unique ); ?>><?php esc_html_e( 'Generate Unique Coupon code', 'woocommerce-abandoned-cart' ); ?></option>
353
+ </select>
354
+ </td>
355
+ </tr>
356
+ <th id='wcap_auto_apply_coupon_id' class='wcap_auto_apply_coupon_id wcap_atc_pre_selected' style='display:none;'><?php esc_html_e( 'Coupon code to apply:', 'woocommerce-abandoned-cart' ); ?></th>
357
+ <tr class='wcap_atc_pre_selected' style='display:none;'>
358
+ <td>
359
+ <div id="coupon_options" class="panel">
360
+ <div class="options_group">
361
+ <p class="form-field" style="padding-left:0px !important;">
362
+ <?php
363
+ $json_ids = array();
364
+
365
+ if ( $coupon_code_id > 0 ) {
366
+ $coupon = get_the_title( $coupon_code_id );
367
+ $json_ids[ $coupon_code_id ] = $coupon;
368
+ }
369
+ if ( version_compare( WC()->version, '3.0.0', '>=' ) ) {
370
+ ?>
371
+ <select id="coupon_ids" name="coupon_ids[]" class="wc-product-search" multiple="multiple" style="width: 37%;" data-placeholder="<?php esc_attr_e( 'Search for a Coupon&hellip;', 'woocommerce' ); ?>" data-action="wcap_json_find_coupons" >
372
+ <?php
373
+ if ( $coupon_code_id > 0 ) {
374
+ $coupon = get_the_title( $coupon_code_id );
375
+ echo '<option value="' . esc_attr( $coupon_code_id ) . '"' . selected( true, true, false ) . '>' . wp_kses_post( $coupon ) . '</option>';
376
+ }
377
+ ?>
378
+ </select>
379
+ <?php
380
+ } else {
381
+ ?>
382
+ <input type="hidden" id="coupon_ids" name="coupon_ids[]" class="wc-product-search" style="width: 30%;" data-placeholder="<?php esc_attr_e( 'Search for a Coupon&hellip;', 'woocommerce' ); ?>" data-multiple="true" data-action="wcap_json_find_coupons"
383
+ data-selected=" <?php echo esc_attr( wp_json_encode( $json_ids ) ); ?> " value="<?php echo esc_html( implode( ',', array_keys( $json_ids ) ) ); ?>" />
384
+ <?php
385
+ }
386
+ ?>
387
+
388
+ </p>
389
+ </div>
390
+ </div>
391
+ </td>
392
+ </tr>
393
+ <th id='wcap_atc_discount_type_label' class='wcap_atc_discount_type_label wcap_atc_unique'><?php esc_html_e( 'Discount Type:', 'woocommerce-abandoned-cart' ); ?></th>
394
+ <tr class='wcap_atc_unique'>
395
+ <td>
396
+ <select id='wcap_atc_discount_type' name='wcap_atc_discount_type' readonly disabled>
397
+ <option value='percent' <?php echo esc_html( $percent_discount ); ?>><?php esc_html_e( 'Percentage Discount', 'woocommerce-abandoned-cart' ); ?></option>
398
+ <option value='amount' <?php echo esc_html( $amount_discount ); ?>><?php esc_html_e( 'Fixed Cart Amount', 'woocommerce-abandoned-cart' ); ?></option>
399
+ </select>
400
+ </td>
401
+ </tr>
402
+ <th id='wcap_atc_discount_amount_label' class='wcap_atc_discount_amount_label wcap_atc_unique'><?php esc_html_e( 'Discount Amount:', 'woocommerce-abandoned-cart' ); ?></th>
403
+ <tr class='wcap_atc_unique'>
404
+ <td>
405
+ <input type='number' id='wcap_atc_discount_amount' name='wcap_atc_discount_amount' min='0' value='<?php echo esc_html( $wcap_atc_discount_amount ); ?>' readonly disabled />
406
+ </td>
407
+ </tr>
408
+ <th id='wcap_atc_coupon_free_shipping_label' class='wcap_atc_coupon_free_shipping_label wcap_atc_unique'><?php esc_html_e( 'Allow Free Shipping?', 'woocommerce-abandoned-cart' ); ?></th>
409
+ <tr class='wcap_atc_unique'>
410
+ <td>
411
+ <input type='checkbox' id='wcap_atc_coupon_free_shipping' name='wcap_atc_coupon_free_shipping' <?php echo esc_attr( $free_shipping_enabled ); ?> readonly disabled />
412
+ </td>
413
+ </tr>
414
+ <th id='wcap_atc_coupon_validity_label' class='wcap_atc_coupon_validity_label'><?php esc_html_e( 'Coupon validity (in minutes):', 'woocommerce-abandoned-cart' ); ?></th>
415
+ <tr>
416
+ <td>
417
+ <input type='number' id='wcap_atc_coupon_validity' name='wcap_atc_coupon_validity' min='0' value='<?php echo esc_attr( $coupon_validity ); ?>' readonly disabled />
418
+ </td>
419
+ </tr>
420
+ <th id='countdown_timer_cart_label' class='countdown_timer_cart_label'><?php esc_html_e( 'Display Urgency message on Cart page (If disabled it will display only on Checkout page)', 'woocommerce-abandoned-cart' ); ?></th>
421
+ <tr>
422
+ <td>
423
+ <button type="button" class="wcap-countdown-timer-cart wcap-toggle-countdown-timer-cart" wcap-atc-countdown-timer-cart-enable = 'off'
424
+ onClick="wcap_button_choice( this, 'wcap-atc-countdown-timer-cart-enable' )" readonly disabled >
425
+ <?php echo esc_attr( $active_text ); ?></button>
426
+ <input type="hidden" name="wcap_countdown_timer_cart" id="wcap_countdown_timer_cart" value="<?php echo esc_attr( $countdown_cart ); ?>" />
427
+ </td>
428
+ </tr>
429
+ <th id='wcap_countdown_msg_label' class='wcap_countdown_msg_label'><?php esc_html_e( 'Urgency message to boost your conversions', 'woocommerce-abandoned-cart' ); ?></th>
430
+ <tr>
431
+ <td>
432
+ <input type='text' id='wcap_countdown_msg' name='wcap_countdown_msg' placeholder='<?php echo esc_attr( 'Coupon <coupon_code> expires in <hh:mm:ss>. Avail it now.' ); ?>' value='<?php echo esc_attr( $countdown_msg ); ?>' readonly disabled />
433
+ <br>
434
+ <i><?php echo esc_html_e( 'Merge tags available: <coupon_code>, <hh:mm:ss>', 'woocommerce-abandoned-cart' ); ?></i>
435
+ </td>
436
+ </tr>
437
+ <th id='wcap_countdown_msg_label' class='wcap_countdown_msg_expired_label'><?php esc_html_e( 'Message to display after coupon validity is reached', 'woocommerce-abandoned-cart' ); ?></th>
438
+ <tr>
439
+ <td>
440
+ <input type='text' id='wcap_countdown_msg_expired' name='wcap_countdown_msg_expired' placeholder='<?php echo esc_attr( 'The offer is no longer valid.' ); ?>' value='<?php echo esc_attr( $countdown_msg_expired ); ?>' readonly disabled />
441
+ <br>
442
+ </td>
443
+ </tr>
444
+ <th id='wcap_atc_coupon_note' class='wcap_atc_coupon_note'><i><?php esc_html_e( 'Note: For orders which use the coupon selected/generated by the ATC module will be marked as "ATC Coupon Used" in WooCommerce->Orders.', 'woocommerce-abandoned-cart' ); ?></i></th>
445
+ <tr></tr>
446
+ </table>
447
+ </div>
448
+ <?php
449
+ }
450
+
451
  /**
452
  * It will will show th preview of the Add To cart Popup modal with the changes made on any of the settings for it.
453
  *
479
  <div class = "wcap_popup_input_field_container" >
480
  <input class = "wcap_popup_input" type = "text" value = "" name = "email" placeholder ="<?php echo esc_html_e( 'Email address', 'woocommerce-abandoned-cart' ); ?>" readonly >
481
  </div>
482
+ <div class="wcap_popup_input_field_container atc_phone_field" >
483
+ <input id="wcap_atc_phone" class="wcap_popup_input" type="text" name="wcap_atc_phone" placeholder="<?php echo esc_html_e( 'Please enter your phone number in E.164 format', 'woocommerce-abandoned-cart' ); ?>" readonly />
484
+ </div>
485
  <button class = "wcap_popup_button" v-bind:style = "wcap_atc_button"><?php echo esc_html_e( 'Add to Cart', 'woocommerce-abandoned-cart' ); ?></button>
486
  <br>
487
  <br>
includes/admin/class-wcap-pro-settings-callbacks.php CHANGED
@@ -103,7 +103,8 @@ if ( ! class_exists( 'WCAP_Pro_Settings_Callbacks' ) ) {
103
  * FB Section.
104
  */
105
  public static function wcap_fb_description() {
106
- echo esc_html_e( 'Configure the plugin to send notifications to Facebook Messenger using the settings below. Please refer the <a href="https://www.tychesoftwares.com/docs/docs/abandoned-cart-pro-for-woocommerce/send-abandoned-cart-reminder-notifications-using-facebook-messenger" target="_blank">following documentation</a> to complete the setup.', 'woocommerce-abandoned-cart' );
 
107
  }
108
 
109
  /**
@@ -258,6 +259,30 @@ if ( ! class_exists( 'WCAP_Pro_Settings_Callbacks' ) ) {
258
 
259
  }
260
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
261
  /**
262
  * Capture email from URL callback.
263
  *
@@ -277,6 +302,122 @@ if ( ! class_exists( 'WCAP_Pro_Settings_Callbacks' ) ) {
277
 
278
  }
279
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
280
  /**
281
  * Product Image Size callback.
282
  *
@@ -393,6 +534,128 @@ if ( ! class_exists( 'WCAP_Pro_Settings_Callbacks' ) ) {
393
  echo wp_kses_post( $html );
394
  }
395
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
396
  } // end of class.
397
 
398
  $wcap_pro_settings_callbacks = new WCAP_Pro_Settings_Callbacks();
103
  * FB Section.
104
  */
105
  public static function wcap_fb_description() {
106
+ $doc_link = 'https://www.tychesoftwares.com/docs/docs/abandoned-cart-pro-for-woocommerce/send-abandoned-cart-reminder-notifications-using-facebook-messenger';
107
+ echo wp_kses_post( __( "Configure the plugin to send notifications to Facebook Messenger using the settings below. Please refer the <a href='$doc_link' target='_blank'>following documentation</a> to complete the setup.", 'woocommerce-abandoned-cart' ) ); // phpcs:ignore
108
  }
109
 
110
  /**
259
 
260
  }
261
 
262
+ /**
263
+ * Callback for considering new abandoned cart of user after x number of days
264
+ *
265
+ * @param array $args Argument given while adding the field.
266
+ *
267
+ * @since 8.5
268
+ */
269
+ public static function wcap_cart_abandoned_after_x_days_order_placed_callback( $args ) {
270
+
271
+ $ac_cart_abandoned_after_x_days_order_placed = get_option( 'ac_cart_abandoned_after_x_days_order_placed', 0 );
272
+
273
+ if ( '' === $ac_cart_abandoned_after_x_days_order_placed ) {
274
+ $ac_cart_abandoned_after_x_days_order_placed = 0;
275
+ }
276
+
277
+ printf(
278
+ '<input type="number" id="ac_cart_abandoned_after_x_days_order_placed" name="ac_cart_abandoned_after_x_days_order_placed" value="%s" readonly disabled />',
279
+ isset( $ac_cart_abandoned_after_x_days_order_placed ) ? esc_attr( $ac_cart_abandoned_after_x_days_order_placed ) : ''
280
+ );
281
+
282
+ $html = '<label for="ac_cart_abandoned_after_x_days_order_placed"> ' . $args[0] . '</label>';
283
+ echo wp_kses_post( $html );
284
+ }
285
+
286
  /**
287
  * Capture email from URL callback.
288
  *
302
 
303
  }
304
 
305
+ /**
306
+ * Callback for enabling capturing through form fields.
307
+ *
308
+ * @param array $args Argument given while adding the field.
309
+ */
310
+ public static function wcap_capture_email_from_forms( $args ) {
311
+
312
+ $capture_email_forms = get_option( 'ac_capture_email_from_forms' );
313
+
314
+ if ( isset( $capture_email_forms ) && '' === $capture_email_forms ) {
315
+ $capture_email_forms = 'off';
316
+ }
317
+ printf(
318
+ '<input type="checkbox" id="ac_capture_email_from_forms" name="ac_capture_email_from_forms" value="on"
319
+ ' . checked( 'on', $capture_email_forms, false ) . ' readonly disabled />'
320
+ );
321
+
322
+ $html = '<label for="ac_capture_email_from_forms"> ' . $args[0] . '</label>';
323
+ echo wp_kses_post( $html );
324
+ }
325
+
326
+ /**
327
+ * Callback for form fields classes.
328
+ *
329
+ * @param array $args Argument given while adding the field.
330
+ */
331
+ public static function wcap_email_forms_classes( $args ) {
332
+
333
+ $email_forms_classes = get_option( 'ac_email_forms_classes' );
334
+
335
+ $readonly_param = ( get_option( 'ac_capture_email_from_forms' ) === '' ) ? 'readonly="readonly"' : '';
336
+ printf(
337
+ '<textarea rows="4" cols="80" id="ac_email_forms_classes" name="ac_email_forms_classes" %s readonly disabled >%s</textarea>',
338
+ esc_attr( $readonly_param ),
339
+ isset( $email_forms_classes ) ? esc_attr( $email_forms_classes ) : ''
340
+ );
341
+
342
+ $html = '<br><label for="ac_email_forms_classes"> ' . $args[0] . '</label>';
343
+ echo wp_kses_post( $html );
344
+ }
345
+
346
+ /**
347
+ * Option for deleting the plugin data upon uninstall.
348
+ *
349
+ * @param array $args Argument for adding field details.
350
+ */
351
+ public static function wcap_deleting_plugin_data( $args ) {
352
+ $wcac_delete_plugin_data = get_option( 'wcac_delete_plugin_data' );
353
+ if ( isset( $wcac_delete_plugin_data ) && '' === $wcac_delete_plugin_data ) {
354
+ $wcac_delete_plugin_data = 'off';
355
+ }
356
+ ?>
357
+ <input type="checkbox" id="wcac_delete_plugin_data" name="wcac_delete_plugin_data" value="on" <?php echo checked( 'on', $wcac_delete_plugin_data, false ); ?> readonly disabled />
358
+ <?php
359
+ $html = '<br><label for="wcac_delete_plugin_data">' . $args[0] . '</label>';
360
+ echo wp_kses_post( $html );
361
+ }
362
+
363
+ /**
364
+ * Option for adding product to cart when ATC is closed.
365
+ *
366
+ * @param array $args Argument for adding field details.
367
+ */
368
+ public static function wcap_atc_close_icon_add_product_to_cart_callback( $args ) {
369
+ $wcap_close_icon_add_product = get_option( 'wcap_atc_close_icon_add_product_to_cart', '' );
370
+ if ( isset( $wcap_close_icon_add_product ) && '' === $wcap_close_icon_add_product ) {
371
+ $wcap_close_icon_add_product = 'off';
372
+ }
373
+ ?>
374
+ <input type="checkbox" id="wcap_atc_close_icon_add_product_to_cart" name="wcap_atc_close_icon_add_product_to_cart" value="on" <?php echo checked( 'on', $wcap_close_icon_add_product, false ); ?> readonly disabled />
375
+ <?php
376
+ $html = '<label for="wcap_atc_close_icon_add_product_to_cart">' . $args[0] . '</label>';
377
+ echo wp_kses_post( $html );
378
+ }
379
+
380
+ /**
381
+ * Email Verification Callback.
382
+ *
383
+ * @param array $args Args Param.
384
+ */
385
+ public static function wcap_enable_debounce_callback( $args ) {
386
+ $enable_debounce = get_option( 'wcap_enable_debounce', '' );
387
+ $debounce_choice = 'on' === $enable_debounce ? 'checked' : '';
388
+ ?>
389
+
390
+ <input
391
+ type="checkbox"
392
+ id="wcap_enable_debounce"
393
+ name="wcap_enable_debounce"
394
+ value="on"
395
+ <?php echo esc_attr( $debounce_choice ); ?>
396
+ readonly disabled />
397
+ <?php
398
+ $html = '<label for="wcap_enable_debounce">' . $args[0] . '</label>';
399
+ echo wp_kses_post( $html );
400
+ }
401
+
402
+ /**
403
+ * DeBounce API Callback.
404
+ *
405
+ * @param array $args Args Param.
406
+ */
407
+ public static function wcap_debounce_api_callback( $args ) {
408
+ $debounce_key = get_option( 'ac_debounce_api' );
409
+ ?>
410
+
411
+ <input
412
+ type="text"
413
+ id="ac_debounce_api"
414
+ name="ac_debounce_api"
415
+ value="<?php echo isset( $debounce_key ) ? esc_attr( $debounce_key ) : ''; ?>" readonly disabled />
416
+ <?php
417
+ $html = '<label for="ac_debounce_api">' . $args[0] . '</label>';
418
+ echo wp_kses_post( $html );
419
+ }
420
+
421
  /**
422
  * Product Image Size callback.
423
  *
534
  echo wp_kses_post( $html );
535
  }
536
 
537
+ /**
538
+ * Callback for Abandoned cart Coupon settings.
539
+ */
540
+ public static function wcap_coupon_callback() {
541
+ }
542
+
543
+ /**
544
+ * Option for deleting the plugin data upon uninstall.
545
+ *
546
+ * @param array $args Argument for adding field details.
547
+ * @since 8.3
548
+ */
549
+ public static function wcap_deleting_coupon_data( $args ) {
550
+ $wcap_delete_coupon_data = get_option( 'wcap_delete_coupon_data', '' );
551
+ if ( isset( $wcap_delete_coupon_data ) && '' === $wcap_delete_coupon_data ) {
552
+ $wcap_delete_coupon_data = 'off';
553
+ }
554
+
555
+ ?>
556
+ <input type="checkbox" id="wcap_delete_coupon_data" name="wcap_delete_coupon_data" value="on" <?php echo checked( 'on', $wcap_delete_coupon_data, false ); ?> readonly disabled />
557
+ <?php
558
+ $html = '<label for="wcap_delete_coupon_data">' . $args[0] . '</label>';
559
+ echo wp_kses_post( $html );
560
+ }
561
+
562
+ /**
563
+ * Coupon deletion manual button.
564
+ *
565
+ * @param array $args - Arguments for the setting.
566
+ */
567
+ public static function wcap_deleting_coupon_data_manually( $args ) {
568
+ ?>
569
+ <input type="button" class="button-secondary" id="wcap_delete_coupons" value="<?php esc_html_e( 'Delete', 'woocommerce-ac' ); ?>" readonly disabled >
570
+ <?php
571
+ $html = '<label>' . $args[0] . '</label>';
572
+ echo wp_kses_post( $html );
573
+ }
574
+
575
+ /**
576
+ * Callback for product name link redirect.
577
+ *
578
+ * @param array $args - Arguments for the setting.
579
+ * @since 8.8.0
580
+ */
581
+ public static function wcap_product_name_redirect_callback( $args ) {
582
+
583
+ $wcap_product_name_redirect = get_option( 'wcap_product_name_redirect', 'checkout' );
584
+
585
+ $pages = array(
586
+ 'product' => __( 'Product Page', 'woocommerce-ac' ),
587
+ 'checkout' => __( 'Checkout Page', 'woocommerce-ac' ),
588
+ );
589
+ ?>
590
+ <select id='wcap_product_name_redirect' name='wcap_product_name_redirect' readonly disabled >
591
+ <?php
592
+ foreach ( $pages as $slug => $display ) {
593
+ $selected = $slug === $wcap_product_name_redirect ? 'selected' : '';
594
+ echo sprintf(
595
+ '<option value="%s" %s>%s</option>',
596
+ esc_attr( $slug ),
597
+ esc_attr( $selected ),
598
+ esc_attr( $display )
599
+ );
600
+ }
601
+ ?>
602
+ </select>
603
+ <?php
604
+ $html = '<label for="wcap_product_name_redirect">' . $args[0] . '</label>';
605
+ echo wp_kses_post( $html );
606
+ }
607
+
608
+ /**
609
+ * Callback for UTM parameters.
610
+ *
611
+ * @param array $args - Arguments for the setting.
612
+ */
613
+ public static function wcap_add_utm_to_links_callback( $args ) {
614
+
615
+ $wcap_add_utm_to_links = get_option( 'wcap_add_utm_to_links', '' );
616
+
617
+ ?>
618
+ <textarea id='wcap_add_utm_to_links' rows='4' cols='50' name='wcap_add_utm_to_links' readonly disabled ><?php echo esc_html( $wcap_add_utm_to_links ); ?></textarea>
619
+ <?php
620
+ $html = '<label for="wcap_add_utm_to_links">' . $args[0] . '</label>';
621
+ echo wp_kses_post( $html );
622
+ }
623
+
624
+ /**
625
+ * Unsubscribe settings section.
626
+ */
627
+ public static function wcap_unsubscribe_options_callback() {
628
+ }
629
+
630
+ /**
631
+ * Callback for unsubscribe landing page.
632
+ *
633
+ * @param array $args Argument given while adding the field.
634
+ */
635
+ public static function wcap_unsubscribe_landing_page_callback( $args ) {
636
+ $unsubscribe_landing_page = get_option( 'wcap_unsubscribe_landing_page', 'default_page' );
637
+
638
+ $unsubscribe_options = array(
639
+ 'default_page' => __( 'Default Unsubscribe Page', 'woocommerce-ac' ),
640
+ 'custom_text' => __( 'Custom Text', 'woocommerce-ac' ),
641
+ 'custom_wp_page' => __( 'Custom WordPress page', 'woocommerce-ac' ),
642
+ );
643
+
644
+ printf( '<select id="wcap_unsubscribe_landing_page" name="wcap_unsubscribe_landing_page" readonly disabled >' );
645
+ foreach ( $unsubscribe_options as $u_key => $u_value ) {
646
+ $selected = $unsubscribe_landing_page === $u_key ? 'selected' : '';
647
+ printf(
648
+ '<option value="%s" %s>%s</option>',
649
+ esc_attr( $u_key ),
650
+ esc_attr( $selected ),
651
+ esc_html( $u_value )
652
+ );
653
+ }
654
+ print( '</select>' );
655
+
656
+ $html = '<label for="wcap_unsubscribe_landing_page_label"> ' . $args[0] . '</label>';
657
+ echo wp_kses_post( $html );
658
+ }
659
  } // end of class.
660
 
661
  $wcap_pro_settings_callbacks = new WCAP_Pro_Settings_Callbacks();
includes/admin/class-wcap-pro-settings.php CHANGED
@@ -104,6 +104,33 @@ if ( ! class_exists( 'WCAP_Pro_Settings' ) ) {
104
  array( __( 'Abandoned carts of logged-in users will not be tracked.', 'woocommerce-abandoned-cart' ) . $upgrade_pro_msg )
105
  );
106
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
  add_settings_field(
108
  'ac_capture_email_address_from_url',
109
  __( 'Capture Email address from URL', 'woocommerce-abandoned-cart' ),
@@ -113,6 +140,67 @@ if ( ! class_exists( 'WCAP_Pro_Settings' ) ) {
113
  array( __( 'If your site URL contain the same key, then it will capture it as an email address of customer.', 'woocommerce-abandoned-cart' ) . $upgrade_pro_msg )
114
  );
115
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
  register_setting(
117
  'woocommerce_ac_settings',
118
  'ac_enable_cart_emails'
@@ -133,11 +221,46 @@ if ( ! class_exists( 'WCAP_Pro_Settings' ) ) {
133
  'ac_disable_logged_in_cart_email'
134
  );
135
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  register_setting(
137
  'woocommerce_ac_settings',
138
  'ac_capture_email_address_from_url'
139
  );
140
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
  add_settings_field(
142
  'wcap_product_image_size',
143
  __( 'Product Image( H x W )', 'woocommerce-abandoned-cart' ),
@@ -147,11 +270,39 @@ if ( ! class_exists( 'WCAP_Pro_Settings' ) ) {
147
  array( __( 'This setting affects the dimension of the product image in the abandoned cart reminder email.', 'woocommerce-abandoned-cart' ) . $upgrade_pro_msg )
148
  );
149
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
150
  register_setting(
151
  'ac_email_settings_section',
152
  'wcap_product_image_size'
153
  );
154
 
 
 
 
 
 
 
 
 
 
 
155
  add_settings_section(
156
  'ac_cron_job_settings_section', // ID used to identify this section and with which to register options.
157
  __( 'Setting for sending Emails & SMS using Action Scheduler', 'woocommerce-abandoned-cart' ), // Title to be displayed on the administration page.
@@ -211,6 +362,27 @@ if ( ! class_exists( 'WCAP_Pro_Settings' ) ) {
211
  array( __( 'The carts abandoned from email addresses with these domains will not be tracked by the plugin. <i>Separate email address domains with commas.</i>', 'woocommerce-abandoned-cart' ) . $upgrade_pro_msg )
212
  );
213
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
214
  }
215
 
216
  /**
104
  array( __( 'Abandoned carts of logged-in users will not be tracked.', 'woocommerce-abandoned-cart' ) . $upgrade_pro_msg )
105
  );
106
 
107
+ add_settings_field(
108
+ 'ac_cart_abandoned_after_x_days_order_placed',
109
+ __( 'Send reminder emails for newly abandoned carts after X days of order placement', 'woocommerce-abandoned-cart' ),
110
+ array( 'WCAP_Pro_Settings_Callbacks', 'wcap_cart_abandoned_after_x_days_order_placed_callback' ),
111
+ 'woocommerce_ac_page',
112
+ 'ac_lite_general_settings_section',
113
+ array( __( 'Reminder emails will be sent for newly abandoned carts only after X days of a previously placed order for a user with the same email address as that of the abandoned cart', 'woocommerce-abandoned-cart' ) . $upgrade_pro_msg )
114
+ );
115
+
116
+ add_settings_field(
117
+ 'ac_capture_email_from_forms',
118
+ __( 'Capture email address from custom fields.', 'woocommerce-abandoned-cart' ),
119
+ array( 'WCAP_Pro_Settings_Callbacks', 'wcap_capture_email_from_forms' ),
120
+ 'woocommerce_ac_page',
121
+ 'ac_lite_general_settings_section',
122
+ array( __( 'Enable this setting to capture email address from other form fields.', 'woocommerce-abandoned-cart' ) . $upgrade_pro_msg )
123
+ );
124
+
125
+ add_settings_field(
126
+ 'ac_email_forms_classes',
127
+ __( 'Class names of the form fields.', 'woocommerce-abandoned-cart' ),
128
+ array( 'WCAP_Pro_Settings_Callbacks', 'wcap_email_forms_classes' ),
129
+ 'woocommerce_ac_page',
130
+ 'ac_lite_general_settings_section',
131
+ array( __( 'Enter class names of fields separated by commas from where email needs to be captured.', 'woocommerce-abandoned-cart' ) . $upgrade_pro_msg )
132
+ );
133
+
134
  add_settings_field(
135
  'ac_capture_email_address_from_url',
136
  __( 'Capture Email address from URL', 'woocommerce-abandoned-cart' ),
140
  array( __( 'If your site URL contain the same key, then it will capture it as an email address of customer.', 'woocommerce-abandoned-cart' ) . $upgrade_pro_msg )
141
  );
142
 
143
+ add_settings_field(
144
+ 'wcac_delete_plugin_data',
145
+ __( 'Remove Data on Uninstall?', 'woocommerce-abandoned-cart' ),
146
+ array( 'WCAP_Pro_Settings_Callbacks', 'wcap_deleting_plugin_data' ),
147
+ 'woocommerce_ac_page',
148
+ 'ac_lite_general_settings_section',
149
+ array( __( 'Enable this setting if you want to completely remove Abandoned Cart data when plugin is deleted.', 'woocommerce-abandoned-cart' ) . $upgrade_pro_msg )
150
+ );
151
+
152
+ add_settings_field(
153
+ 'wcap_atc_close_icon_add_product_to_cart',
154
+ __( 'Add Product to Cart when Close Icon is clicked?', 'woocommerce-abandoned-cart' ),
155
+ array( 'WCAP_Pro_Settings_Callbacks', 'wcap_atc_close_icon_add_product_to_cart_callback' ),
156
+ 'woocommerce_ac_page',
157
+ 'ac_lite_general_settings_section',
158
+ array( __( 'Enable this setting if you want the product to the added to cart when the user clicks on the Close Icon in the Add to Cart Popup Modal.', 'woocommerce-abandoned-cart' ) . $upgrade_pro_msg )
159
+ );
160
+
161
+ add_settings_field(
162
+ 'wcap_enable_debounce',
163
+ __( 'Enable Email Verification:', 'woocommerce-abandoned-cart' ),
164
+ array( 'WCAP_Pro_Settings_Callbacks', 'wcap_enable_debounce_callback' ),
165
+ 'woocommerce_ac_page',
166
+ 'ac_lite_general_settings_section',
167
+ array( __( 'Enable this checkbox to allow email verification to be done via DeBounce API services.', 'woocommerce-abandoned-cart' ) . $upgrade_pro_msg )
168
+ );
169
+
170
+ add_settings_field(
171
+ 'ac_debounce_api',
172
+ __( 'Enter DeBounce API Key', 'woocommerce-abandoned-cart' ),
173
+ array( 'WCAP_Pro_Settings_Callbacks', 'wcap_debounce_api_callback' ),
174
+ 'woocommerce_ac_page',
175
+ 'ac_lite_general_settings_section',
176
+ array( __( 'Enter DeBounce JS API Key.', 'woocommerce-abandoned-cart' ) . $upgrade_pro_msg )
177
+ );
178
+
179
+ add_settings_section(
180
+ 'ac_coupon_settings_section', // ID used to identify this section and with which to register options.
181
+ __( 'Coupon Settings', 'woocommerce-abandoned-cart' ), // Title to be displayed on the administration page.
182
+ array( 'WCAP_Pro_Settings_Callbacks', 'wcap_coupon_callback' ), // Callback used to render the description of the section.
183
+ 'woocommerce_ac_page' // Page on which to add this section of options.
184
+ );
185
+
186
+ add_settings_field(
187
+ 'wcap_delete_coupon_data',
188
+ __( 'Delete Coupons Automatically', 'woocommerce-abandoned-cart' ),
189
+ array( 'WCAP_Pro_Settings_Callbacks', 'wcap_deleting_coupon_data' ),
190
+ 'woocommerce_ac_page',
191
+ 'ac_coupon_settings_section',
192
+ array( __( 'Enable this setting if you want to completely remove the expired and used coupon code automatically every 15 days.', 'woocommerce-abandoned-cart' ) . $upgrade_pro_msg )
193
+ );
194
+
195
+ add_settings_field(
196
+ 'wcap_delete_coupon_data_manually',
197
+ __( 'Delete Coupons Manually', 'woocommerce-abandoned-cart' ),
198
+ array( 'WCAP_Pro_Settings_Callbacks', 'wcap_deleting_coupon_data_manually' ),
199
+ 'woocommerce_ac_page',
200
+ 'ac_coupon_settings_section',
201
+ array( __( 'If you want to completely remove the expired and used coupon code now then click on "Delete" button.', 'woocommerce-abandoned-cart' ) . $upgrade_pro_msg )
202
+ );
203
+
204
  register_setting(
205
  'woocommerce_ac_settings',
206
  'ac_enable_cart_emails'
221
  'ac_disable_logged_in_cart_email'
222
  );
223
 
224
+ register_setting(
225
+ 'woocommerce_ac_settings',
226
+ 'ac_capture_email_from_forms'
227
+ );
228
+
229
+ register_setting(
230
+ 'woocommerce_ac_settings',
231
+ 'ac_cart_abandoned_after_x_days_order_placed'
232
+ );
233
+
234
+ register_setting(
235
+ 'woocommerce_ac_settings',
236
+ 'ac_email_forms_classes'
237
+ );
238
+
239
  register_setting(
240
  'woocommerce_ac_settings',
241
  'ac_capture_email_address_from_url'
242
  );
243
 
244
+ register_setting(
245
+ 'woocommerce_ac_settings',
246
+ 'wcac_delete_plugin_data'
247
+ );
248
+
249
+ register_setting(
250
+ 'woocommerce_ac_settings',
251
+ 'wcap_atc_close_icon_add_product_to_cart'
252
+ );
253
+
254
+ register_setting(
255
+ 'woocommerce_ac_settings',
256
+ 'wcap_enable_debounce'
257
+ );
258
+
259
+ register_setting(
260
+ 'woocommerce_ac_settings',
261
+ 'ac_debounce_api'
262
+ );
263
+
264
  add_settings_field(
265
  'wcap_product_image_size',
266
  __( 'Product Image( H x W )', 'woocommerce-abandoned-cart' ),
270
  array( __( 'This setting affects the dimension of the product image in the abandoned cart reminder email.', 'woocommerce-abandoned-cart' ) . $upgrade_pro_msg )
271
  );
272
 
273
+ add_settings_field(
274
+ 'wcap_product_name_redirect',
275
+ __( 'Product Name Redirects to', 'woocommerce-ac' ),
276
+ array( 'WCAP_Pro_Settings_Callbacks', 'wcap_product_name_redirect_callback' ),
277
+ 'woocommerce_ac_email_page',
278
+ 'ac_email_settings_section',
279
+ array( __( 'Select the page where product name in reminder emails should redirect to.', 'woocommerce-ac' ) . $upgrade_pro_msg )
280
+ );
281
+
282
+ add_settings_field(
283
+ 'wcap_add_utm_to_links',
284
+ __( 'UTM parameters to be added to all the links in reminder emails', 'woocommerce-ac' ),
285
+ array( 'WCAP_Pro_Settings_Callbacks', 'wcap_add_utm_to_links_callback' ),
286
+ 'woocommerce_ac_email_page',
287
+ 'ac_email_settings_section',
288
+ array( __( 'UTM parameters that should be added to all the links in reminder emails.', 'woocommerce-ac' ) . $upgrade_pro_msg )
289
+ );
290
+
291
  register_setting(
292
  'ac_email_settings_section',
293
  'wcap_product_image_size'
294
  );
295
 
296
+ register_setting(
297
+ 'woocommerce_ac_settings',
298
+ 'wcap_product_name_redirect'
299
+ );
300
+
301
+ register_setting(
302
+ 'woocommerce_ac_settings',
303
+ 'wcap_add_utm_to_links'
304
+ );
305
+
306
  add_settings_section(
307
  'ac_cron_job_settings_section', // ID used to identify this section and with which to register options.
308
  __( 'Setting for sending Emails & SMS using Action Scheduler', 'woocommerce-abandoned-cart' ), // Title to be displayed on the administration page.
362
  array( __( 'The carts abandoned from email addresses with these domains will not be tracked by the plugin. <i>Separate email address domains with commas.</i>', 'woocommerce-abandoned-cart' ) . $upgrade_pro_msg )
363
  );
364
 
365
+ add_settings_section(
366
+ 'ac_unsubscribe_section',
367
+ __( 'Unsubscribe Settings', 'woocommerce-abandoned-cart' ),
368
+ array( 'WCAP_Pro_Settings_Callbacks', 'wcap_unsubscribe_options_callback' ),
369
+ 'woocommerce_ac_page'
370
+ );
371
+
372
+ $doc_link = 'https://www.tychesoftwares.com/docs/docs/abandoned-cart-pro-for-woocommerce/unsubscribe-landing-page-options';
373
+ add_settings_field(
374
+ 'wcap_unsubscribe_landing_page',
375
+ __( 'Unsubscribe Landing Page', 'woocommerce-abandoned-cart' ),
376
+ array( 'WCAP_Pro_Settings_Callbacks', 'wcap_unsubscribe_landing_page_callback' ),
377
+ 'woocommerce_ac_page',
378
+ 'ac_unsubscribe_section',
379
+ array( __( "Select a source where the user must be redirected when an Unsubscribe link is clicked from reminders sent. For details, please check the <a href='$doc_link' target='_blank'>documentation</a>.", 'woocommerce-abandoned-cart' ) . $upgrade_pro_msg ) // phpcs:ignore
380
+ );
381
+
382
+ register_setting(
383
+ 'woocommerce_ac_settings',
384
+ 'wcap_unsubscribe_landing_page'
385
+ );
386
  }
387
 
388
  /**
includes/class-wcal-default-template-settings.php CHANGED
@@ -29,11 +29,8 @@ class Wcal_Default_Template_Settings {
29
  $active_post_array = 0;
30
  $email_frequency_array = 1;
31
  $day_or_hour_array = 'Hours';
32
- if ( ! defined( 'WCAL_PLUGIN_PATH' ) ) {
33
- define( 'WCAL_PLUGIN_PATH', untrailingslashit( plugin_dir_path( __FILE__ ) ) );
34
- }
35
  ob_start();
36
- include WCAL_PLUGIN_PATH . '/templates/template_1.php';
37
  $content = ob_get_clean();
38
  $body_content_array = addslashes( $content );
39
  $is_wc_template = 1;
29
  $active_post_array = 0;
30
  $email_frequency_array = 1;
31
  $day_or_hour_array = 'Hours';
 
 
 
32
  ob_start();
33
+ include WCAL_PLUGIN_PATH . '/includes/templates/template_1.php';
34
  $content = ob_get_clean();
35
  $body_content_array = addslashes( $content );
36
  $is_wc_template = 1;
includes/classes/class-wcal-dashboard-report.php CHANGED
@@ -81,6 +81,16 @@ if ( ! class_exists( 'Wcal_Dashoard_Report' ) ) {
81
  $percent_of_sales = 0;
82
  }
83
 
 
 
 
 
 
 
 
 
 
 
84
  ?>
85
 
86
  </form>
@@ -252,9 +262,7 @@ if ( ! class_exists( 'Wcal_Dashoard_Report' ) ) {
252
  </div>
253
  </div>
254
 
255
- <div class="chartgraph">
256
- <img src="<?php echo esc_attr( plugins_url() ) . '/woocommerce-abandoned-cart/assets/images/Coming_Soon.png'; ?>" />
257
- </div>
258
 
259
  </div>
260
  <?php
@@ -557,7 +565,204 @@ if ( ! class_exists( 'Wcal_Dashoard_Report' ) ) {
557
  $count_month = null === $order_totals->total_sales ? 0 : $order_totals->total_sales;
558
  return $count_month;
559
  }
560
- }
561
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
562
  }
563
  ?>
81
  $percent_of_sales = 0;
82
  }
83
 
84
+ $graph_data = self::get_abandoned_data();
85
+
86
+ wp_localize_script(
87
+ 'reports_js',
88
+ 'wcal_graph_data',
89
+ array(
90
+ 'data' => $graph_data,
91
+ )
92
+ );
93
+ wp_enqueue_script( 'reports_js' );
94
  ?>
95
 
96
  </form>
262
  </div>
263
  </div>
264
 
265
+ <div class="chartgraph"></div>
 
 
266
 
267
  </div>
268
  <?php
565
  $count_month = null === $order_totals->total_sales ? 0 : $order_totals->total_sales;
566
  return $count_month;
567
  }
 
568
 
569
+ /**
570
+ * Returned Abandoned & Recovered cart stats.
571
+ *
572
+ * @param string $selected_data_range - Range selected.
573
+ * @param string $start_date - Range Start Date.
574
+ * @param string $end_date - Range End Date.
575
+ * @return array - Stats Data.
576
+ *
577
+ * @since 5.8.8
578
+ */
579
+ public static function get_adv_stats( $selected_data_range, $start_date, $end_date ) {
580
+ global $wpdb;
581
+
582
+ if ( '' === $start_date && '' === $end_date ) {
583
+ return array();
584
+ } else {
585
+ $begin_of_month = strtotime( $start_date );
586
+ $end_of_month = strtotime( $end_date );
587
+ }
588
+ $count_month = 0;
589
+ $blank_cart_info = '{"cart":[]}';
590
+ $blank_cart_info_guest = '[]';
591
+
592
+ $ac_cutoff_time = is_numeric( get_option( 'ac_lite_cart_abandoned_time', 10 ) ) ? get_option( 'ac_lite_cart_abandoned_time', 10 ) : 10;
593
+ $cut_off_time = $ac_cutoff_time * 60;
594
+ $current_time = current_time( 'timestamp' ); // phpcs:ignore
595
+ $compare_time = $current_time - $cut_off_time;
596
+
597
+ $count_month = $wpdb->get_results( // phpcs:ignore
598
+ $wpdb->prepare(
599
+ "SELECT abandoned_cart_info, recovered_cart FROM `" . $wpdb->prefix . "ac_abandoned_cart_history_lite`
600
+ WHERE abandoned_cart_time >= %s
601
+ AND abandoned_cart_time <= %s
602
+ AND abandoned_cart_time <= %s
603
+ AND ( cart_ignored <> '1' OR recovered_cart <> '0' )
604
+ AND ( ( user_type = 'REGISTERED' AND abandoned_cart_info NOT LIKE %s ) OR ( user_type = 'GUEST' AND abandoned_cart_info NOT LIKE %s AND abandoned_cart_info NOT LIKE %s ) )",
605
+ $begin_of_month,
606
+ $end_of_month,
607
+ $compare_time,
608
+ "%$blank_cart_info%",
609
+ $blank_cart_info_guest,
610
+ "%$blank_cart_info%"
611
+ )
612
+ );
613
+
614
+ $abandoned_count = 0;
615
+ $recovered_count = 0;
616
+ $abandoned_amount = 0;
617
+ $recovered_amount = 0;
618
+
619
+ foreach ( $count_month as $cart_value ) {
620
+
621
+ $abandoned_count++;
622
+
623
+ if ( (int) $cart_value->recovered_cart > 0 ) {
624
+ $recovered_count++;
625
+ }
626
+
627
+ $cart_info = json_decode( stripslashes( $cart_value->abandoned_cart_info ) );
628
+ if ( isset( $cart_info->cart ) ) {
629
+ foreach ( $cart_info->cart as $cart ) {
630
+ $abandoned_amount += isset( $cart->line_total ) ? $cart->line_total : 0;
631
+ $recovered_id = $cart_value->recovered_cart;
632
+ if ( (int) $recovered_id > 0 ) {
633
+ $rec_order_total = get_post_meta( $recovered_id, '_order_total', true );
634
+ $recovered_amount += isset( $rec_order_total ) && $rec_order_total > 0 ? $rec_order_total : 0;
635
+ }
636
+ }
637
+ }
638
+ }
639
+
640
+ return array(
641
+ 'abandoned_count' => $abandoned_count,
642
+ 'recovered_count' => $recovered_count,
643
+ 'abandoned_amount' => $abandoned_amount,
644
+ 'recovered_amount' => $recovered_amount,
645
+ );
646
+ }
647
+ /**
648
+ * Get Graph Data
649
+ *
650
+ * @since 5.8.8
651
+ */
652
+ public static function get_abandoned_data() {
653
+
654
+ $start_timestamp = self::$start_timestamp;
655
+ $end_timestamp = self::$end_timestamp;
656
+
657
+ $current_date = date( 'd' ); // phpcs:ignore
658
+ $current_month = date( 'm' ); // phpcs:ignore
659
+ $current_year = date( 'Y' ); // phpcs:ignore
660
+
661
+ $selected_data_range = isset( $_GET['duration_select'] ) ? sanitize_text_field( wp_unslash( $_GET['duration_select'] ) ) : 'this_month'; //phpcs:ignore
662
+ switch ( $selected_data_range ) {
663
+ case 'this_month':
664
+ $display_freq = $current_date > 15 ? 'weekly' : 'daily';
665
+ $end_timestamp = current_time( 'timestamp' ); // phpcs:ignore
666
+ break;
667
+ case 'last_month':
668
+ case 'this_quarter':
669
+ case 'last_quarter':
670
+ $display_freq = 'weekly';
671
+ break;
672
+ case 'this_year':
673
+ $display_freq = $current_month > 3 ? 'monthly' : 'weekly';
674
+ $end_timestamp = current_time( 'timestamp' ); // phpcs:ignore
675
+ break;
676
+ case 'last_year':
677
+ $display_freq = 'monthly';
678
+ break;
679
+ case 'custom':
680
+ $display_freq = 'weekly';
681
+ $number_of_days = round( ( $end_timestamp - $start_timestamp ) / ( 60 * 60 * 24 ) );
682
+ if ( is_numeric( $number_of_days ) && $number_of_days > 0 ) {
683
+ if ( $number_of_days <= 15 ) {
684
+ $display_freq = 'daily';
685
+ } elseif ( $number_of_days <= 90 ) {
686
+ $display_freq = 'weekly';
687
+ } else {
688
+ $display_freq = 'monthly';
689
+ }
690
+ }
691
+ break;
692
+ }
693
+
694
+ $data = self::wcap_get_graph_data( $selected_data_range, $start_timestamp, $end_timestamp, $display_freq );
695
+ return $data;
696
+
697
+ }
698
+
699
+ /**
700
+ * Collect Graph data to be displayed & return.
701
+ *
702
+ * @param string $selected_data_range - Selected Date Range.
703
+ * @param timestamp $start_timestamp - Start Timestamp.
704
+ * @param timestamp $end_timestamp - End Timestamp.
705
+ * @param string $display_freq - Display Frequency.
706
+ * @return array $data - Data to be returned.
707
+ *
708
+ * @since 5.8.8
709
+ */
710
+ public static function wcap_get_graph_data( $selected_data_range, $start_timestamp, $end_timestamp, $display_freq ) {
711
+
712
+ $start_date = date( 'Y-m-d H:i:s', $start_timestamp ); // phpcs:ignore
713
+ switch ( $display_freq ) {
714
+ case 'daily':
715
+ $range_end = date( 'Y-m-d H:i:s', strtotime( '+1 day', $start_timestamp ) ); // phpcs:ignore
716
+ do {
717
+ $get_stats = self::get_adv_stats( $selected_data_range, $start_date, $range_end );
718
+ $start_date_display = date( 'd M', strtotime( $start_date ) ); // phpcs:ignore
719
+ $data[ $start_date_display ] = array(
720
+ 'abandoned_amount' => $get_stats['abandoned_amount'],
721
+ 'recovered_amount' => $get_stats['recovered_amount'],
722
+ );
723
+ $start_date = date( 'Y-m-d H:i:s', strtotime( $range_end ) ); // phpcs:ignore
724
+ $range_end = date( 'Y-m-d', strtotime( "$start_date +1 day" ) ); // phpcs:ignore
725
+ } while ( strtotime( $start_date ) < $end_timestamp );
726
+ break;
727
+ case 'weekly':
728
+ $range_end = date( 'Y-m-d H:i:s', strtotime( '+7 days', $start_timestamp ) ); // phpcs:ignore
729
+ $range_end_stamp = strtotime( $range_end );
730
+
731
+ do {
732
+ if ( $range_end_stamp > $end_timestamp ) {
733
+ $range_end = date( 'Y-m-d', $end_timestamp ); // phpcs:ignore
734
+ $range_end_stamp = $end_timestamp;
735
+ }
736
+
737
+ $get_stats = self::get_adv_stats( $selected_data_range, $start_date, $range_end );
738
+ $start_date_display = date( 'd M', strtotime( $start_date ) ); // phpcs:ignore
739
+ $data[ $start_date_display ] = array(
740
+ 'abandoned_amount' => $get_stats['abandoned_amount'],
741
+ 'recovered_amount' => $get_stats['recovered_amount'],
742
+ );
743
+ $start_date = date( 'Y-m-d H:i:s', $range_end_stamp ); // phpcs:ignore
744
+ $range_end = date( 'Y-m-d', strtotime( "$start_date +7 days" ) ); // phpcs:ignore
745
+ $range_end_stamp = strtotime( $range_end );
746
+
747
+ } while ( strtotime( $start_date ) < $end_timestamp );
748
+ break;
749
+ case 'monthly':
750
+ $range_end = date( 'Y-m-d H:i:s', strtotime( '+1 month', $start_timestamp ) ); // phpcs:ignore
751
+ do {
752
+ $get_stats = self::get_adv_stats( $selected_data_range, $start_date, $range_end );
753
+ $start_date_display = date( 'M y', strtotime( $start_date ) ); // phpcs:ignore
754
+ $data[ $start_date_display ] = array(
755
+ 'abandoned_amount' => $get_stats['abandoned_amount'],
756
+ 'recovered_amount' => $get_stats['recovered_amount'],
757
+ );
758
+ $start_date = date( 'Y-m-d H:i:s', strtotime( $range_end ) ); // phpcs:ignore
759
+ $range_end = date( 'Y-m-d', strtotime( "$start_date +1 month" ) ); // phpcs:ignore
760
+ } while ( strtotime( $start_date ) < $end_timestamp );
761
+
762
+ break;
763
+ }
764
+ return $data;
765
+ }
766
+ }
767
  }
768
  ?>
includes/templates/atc-rules/html-atc-rules-add-row.php ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This file will add functions related to verifying email present on ATC field.
4
+ *
5
+ * @author Tyche Softwares
6
+ * @package Abandoned-Cart-Pro-for-WooCommerce/Admin/ATC
7
+ * @since 8.8.0
8
+ */
9
+
10
+ // Exit if accessed directly.
11
+ if ( ! defined( 'ABSPATH' ) ) {
12
+ exit;
13
+ }
14
+
15
+ $rule_type_options = apply_filters(
16
+ 'wcap_atc_rules_engine_rule_type_values',
17
+ array(
18
+ 'select_disabled' => __( 'Select Rule Type', 'woocommerce-ac' ),
19
+ 'custom_pages' => __( 'Pages', 'woocommerce-ac' ),
20
+ 'product_cat' => __( 'Product Categories', 'woocommerce-ac' ),
21
+ 'products' => __( 'Products', 'woocommerce-ac' ),
22
+ )
23
+ );
24
+
25
+ $rule_condition_options = apply_filters(
26
+ 'wcap_atc_rules_engine_rule_condition_values',
27
+ array(
28
+ 'select_disabled' => __( 'Select Condition', 'woocommerce-ac' ),
29
+ 'includes' => __( 'Includes any of', 'woocommerce-ac' ),
30
+ 'excludes' => __( 'Excludes any of', 'woocommerce-ac' ),
31
+ )
32
+ );
33
+ ?>
34
+ <td class='wcap_rule_type_col'>
35
+ <select class='wcap_rule_type' id='wcap_rule_type_' name='wcap_rule_type_' onChange='wcap_rule_values( this.id )'>
36
+ <?php
37
+ foreach ( $rule_type_options as $type_key => $type_value ) {
38
+ $disabled = '';
39
+ $selected = 'select_disabled' === $type_key ? 'selected' : '';
40
+ if ( strpos( $type_key, 'disabled' ) !== false ) {
41
+ $type_key = '';
42
+ $disabled = 'disabled';
43
+ }
44
+
45
+ echo sprintf(
46
+ "<option value='%s' %s %s class=''>%s</option>",
47
+ esc_attr( $type_key ),
48
+ esc_attr( $disabled ),
49
+ esc_attr( $selected ),
50
+ esc_html( $type_value )
51
+ );
52
+ }
53
+ ?>
54
+ </select>
55
+ </td>
56
+ <td class='wcap_rule_condition_col'>
57
+ <select class='wcap_rule_condition' id='wcap_rule_condition_' name='wcap_rule_condition_'>
58
+ <?php
59
+ foreach ( $rule_condition_options as $cond_key => $cond_value ) {
60
+ $disabled = '';
61
+
62
+ if ( strpos( $cond_key, 'disabled' ) !== false ) {
63
+ $cond_key = '';
64
+ $disabled = 'disabled';
65
+ }
66
+ echo sprintf(
67
+ "<option value='%s' %s>%s</option>",
68
+ esc_attr( $cond_key ),
69
+ esc_attr( $disabled ),
70
+ esc_html( $cond_value )
71
+ );
72
+ }
73
+ ?>
74
+ </select>
75
+ </td>
76
+ <td class='wcap_rule_value_col'>
77
+ <select class='wcap_rule_value' id='wcap_rule_value_' name='wcap_rule_value_' style='width: 90%;'>
78
+ <option value='' disabled selected><?php esc_html_e( 'Select values', 'woocommerce-ac' ); ?></option>
79
+ </select>
80
+ </td>
81
+ <td>
82
+ <a href='javascript:void(0)' class='wcap_delete_rule_button'>
83
+ <i class='fa fa-trash fa-lg fa-fw' id='wcap_rule_delete_' onclick='wcap_delete_rule_row( this.id )'></i>
84
+ </a>
85
+ <a href='javascript:void(0)' class='wcap_add_rule_button' id='add_new' onclick='wcap_add_new_rule_row( this.id )'>
86
+ <i class='fa fa-plus fa-lg fa-fw'></i>
87
+ <?php echo esc_html__( 'Add Rule', 'woocommerce-ac' ); ?>
88
+ </a>
89
+ </td>
includes/templates/atc-rules/html-atc-rules-edit-row.php ADDED
@@ -0,0 +1,191 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This file will add functions related to verifying email present on ATC field.
4
+ *
5
+ * @author Tyche Softwares
6
+ * @package Abandoned-Cart-Pro-for-WooCommerce/Admin/ATC
7
+ * @since 8.8.0
8
+ */
9
+
10
+ // Exit if accessed directly.
11
+ if ( ! defined( 'ABSPATH' ) ) {
12
+ exit;
13
+ }
14
+
15
+ $selected_rule_type = isset( $rule_type ) ? $rule_type : '';
16
+ $selected_rule_cond = isset( $rule_condition ) ? $rule_condition : '';
17
+ $selected_rule_value = isset( $rule_value ) ? $rule_value : '';
18
+
19
+ $rule_type_options = apply_filters(
20
+ 'wcap_atc_rules_engine_rule_type_values',
21
+ array(
22
+ 'select_disabled' => __( 'Select Rule Type', 'woocommerce-ac' ),
23
+ 'custom_pages' => __( 'Pages', 'woocommerce-ac' ),
24
+ 'product_cat' => __( 'Product Categories', 'woocommerce-ac' ),
25
+ 'products' => __( 'Products', 'woocommerce-ac' ),
26
+ )
27
+ );
28
+
29
+ $rule_condition_options = apply_filters(
30
+ 'wcap_atc_rules_engine_rule_condition_values',
31
+ array(
32
+ 'select_disabled' => __( 'Select Condition', 'woocommerce-ac' ),
33
+ 'includes' => __( 'Includes any of', 'woocommerce-ac' ),
34
+ 'excludes' => __( 'Excludes any of', 'woocommerce-ac' ),
35
+ )
36
+ );
37
+
38
+ $rule_value_array = array();
39
+ switch ( $selected_rule_type ) {
40
+ case 'payment_gateways':
41
+ $wc_payment_gateways = new WC_Payment_Gateways();
42
+ $payment_gateways = $wc_payment_gateways->payment_gateways();
43
+ foreach ( $payment_gateways as $slug => $gateways ) {
44
+ if ( 'yes' === $gateways->enabled ) {
45
+ $rule_value_array[ $slug ] = $gateways->title;
46
+ }
47
+ }
48
+ break;
49
+ case 'cart_status':
50
+ $rule_value_array = array(
51
+ 'abandoned' => __( 'Abandoned', 'woocommerce-ac' ),
52
+ 'abandoned-pending' => __( 'Abandoned - Pending Payment', 'woocommerce-ac' ),
53
+ 'abandoned-cancelled' => __( 'Abandoned - Order Cancelled', 'woocommerce-ac' ),
54
+ );
55
+ break;
56
+ case 'send_to':
57
+ $rule_value_array = array(
58
+ 'all' => __( 'All', 'woocommerce-ac' ),
59
+ 'registered_users' => __( 'Registered Users', 'woocommerce-ac' ),
60
+ 'guest_users' => __( 'Guest Users', 'woocommerce-ac' ),
61
+ 'wcap_email_customer' => __( 'Customers', 'woocommerce-ac' ),
62
+ 'wcap_email_admin' => __( 'Admin', 'woocommerce-ac' ),
63
+ 'wcap_email_customer_admin' => __( 'Customers & Admin', 'woocommerce-ac' ),
64
+ 'email_addresses' => __( 'Email Addresses', 'woocommerce-ac' ),
65
+ );
66
+ break;
67
+ }
68
+ $rule_value_array = apply_filters( 'wcap_rules_engine_rule_option_values', $rule_value_array );
69
+
70
+ $type_id = "wcap_rule_type_$row_id";
71
+ $cond_id = "wcap_rule_condition_$row_id";
72
+ $val_id = "wcap_rule_value_$row_id";
73
+ $delete_id = "wcap_rule_delete_$row_id";
74
+
75
+ ?>
76
+ <td class='wcap_rule_type_col'>
77
+ <select class='wcap_rule_type' id='<?php echo esc_attr( $type_id ); ?>' name='<?php echo esc_attr( $type_id ); ?>' onChange='wcap_rule_values( this.id )'>
78
+ <?php
79
+ foreach ( $rule_type_options as $type_key => $type_value ) {
80
+ $disabled = '';
81
+ $selected = '' === $selected_rule_type && 'selected_disabled' === $type_key ? 'selected' : '';
82
+ $selected = '' !== $selected_rule_type && $selected_rule_type === $type_key ? 'selected' : '';
83
+
84
+ if ( strpos( $type_key, 'disabled' ) !== false ) {
85
+ $type_key = '';
86
+ $disabled = 'disabled';
87
+ }
88
+
89
+ echo sprintf(
90
+ "<option value='%s' %s %s>%s</option>",
91
+ esc_attr( $type_key ),
92
+ esc_attr( $disabled ),
93
+ esc_attr( $selected ),
94
+ esc_html( $type_value )
95
+ );
96
+ }
97
+ ?>
98
+ </select>
99
+ </td>
100
+ <td class='wcap_rule_condition_col'>
101
+ <select class='wcap_rule_condition' id='<?php echo esc_attr( $cond_id ); ?>' name='<?php echo esc_attr( $cond_id ); ?>'>
102
+ <?php
103
+ foreach ( $rule_condition_options as $cond_key => $cond_value ) {
104
+ $disabled = '';
105
+ $selected = '' === $selected_rule_cond && 'selected_disabled' === $cond_key ? 'selected' : '';
106
+ $selected = '' !== $selected_rule_cond && $selected_rule_cond === $cond_key ? 'selected' : '';
107
+
108
+ if ( strpos( $cond_key, 'disabled' ) !== false ) {
109
+ $cond_key = '';
110
+ $disabled = 'disabled';
111
+ }
112
+ echo sprintf(
113
+ "<option value='%s' %s %s>%s</option>",
114
+ esc_attr( $cond_key ),
115
+ esc_attr( $disabled ),
116
+ esc_attr( $selected ),
117
+ esc_html( $cond_value )
118
+ );
119
+ }
120
+ ?>
121
+ </select>
122
+ </td>
123
+ <td class='wcap_rule_value_col'>
124
+ <?php
125
+ switch ( $selected_rule_type ) {
126
+ case 'custom_pages':
127
+ ?>
128
+ <select id='<?php echo esc_attr( $val_id ); ?>' name='<?php echo esc_attr( $val_id . '[]' ); ?>' class="wcap_rule_value wc-product-search" multiple="multiple" data-placeholder="<?php esc_attr_e( 'Search for a Page&hellip;', 'woocommerce' ); ?>" data-action="wcap_json_find_pages">
129
+ <?php
130
+ if ( is_array( $selected_rule_value ) && count( $selected_rule_value ) > 0 ) {
131
+ foreach ( $selected_rule_value as $v_id ) {
132
+ if ( $v_id > 0 ) {
133
+ $v_object = get_the_title( $v_id );
134
+ echo '<option value="' . esc_attr( $v_id ) . '"' . selected( true, true, false ) . '>' . wp_kses_post( $v_object ) . '</option>';
135
+ }
136
+ }
137
+ }
138
+ ?>
139
+ </select>
140
+ <?php
141
+ break;
142
+ case 'product_cat':
143
+ ?>
144
+ <select id='<?php echo esc_attr( $val_id ); ?>' name='<?php echo esc_attr( $val_id . '[]' ); ?>' class="wcap_rule_value wc-product-search" multiple="multiple" data-placeholder="<?php esc_attr_e( 'Search for a Product Category&hellip;', 'woocommerce' ); ?>" data-action="wcap_json_find_product_cat">
145
+ <?php
146
+ if ( is_array( $selected_rule_value ) && count( $selected_rule_value ) > 0 ) {
147
+ foreach ( $selected_rule_value as $v_id ) {
148
+ if ( $v_id > 0 ) {
149
+ $v_object = get_term( $v_id );
150
+ echo '<option value="' . esc_attr( $v_id ) . '"' . selected( true, true, false ) . '>' . wp_kses_post( $v_object->name ) . '</option>';
151
+ }
152
+ }
153
+ }
154
+ ?>
155
+ </select>
156
+ <?php
157
+ break;
158
+ case 'products':
159
+ ?>
160
+ <select id='<?php echo esc_attr( $val_id ); ?>' name='<?php echo esc_attr( $val_id . '[]' ); ?>' class="wcap_rule_value wc-product-search" multiple="multiple" data-placeholder="<?php esc_attr_e( 'Search for a Product&hellip;', 'woocommerce' ); ?>" data-action="wcap_json_find_products">
161
+ <?php
162
+ if ( is_array( $selected_rule_value ) && count( $selected_rule_value ) > 0 ) {
163
+ foreach ( $selected_rule_value as $v_id ) {
164
+ if ( $v_id > 0 ) {
165
+ $v_object = get_the_title( $v_id );
166
+ echo '<option value="' . esc_attr( $v_id ) . '"' . selected( true, true, false ) . '>' . wp_kses_post( $v_object ) . '</option>';
167
+ }
168
+ }
169
+ }
170
+ ?>
171
+ </select>
172
+ <?php
173
+ break;
174
+ }
175
+ ?>
176
+ </td>
177
+ <td>
178
+ <a href='javascript:void(0)' class='wcap_delete_rule_button'>
179
+ <i class='fa fa-trash fa-lg fa-fw' id='<?php echo esc_attr( $delete_id ); ?>' onclick='wcap_delete_rule_row( this.id )'></i>
180
+ </a>
181
+ <?php
182
+ if ( $last_row ) {
183
+ ?>
184
+ <a href='javascript:void(0)' class='wcap_add_rule_button' id='add_new' onclick='wcap_add_new_rule_row( this.id )'>
185
+ <i class='fa fa-plus fa-lg fa-fw'></i>
186
+ <?php echo esc_html__( 'Add Rule', 'woocommerce-ac' ); ?>
187
+ </a>
188
+ <?php
189
+ }
190
+ ?>
191
+ </td>
includes/templates/atc-rules/html-atc-rules-engine.php ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This file will add functions related to verifying email present on ATC field.
4
+ *
5
+ * @author Tyche Softwares
6
+ * @package Abandoned-Cart-Pro-for-WooCommerce/Admin/ATC
7
+ * @since 8.8.0
8
+ */
9
+
10
+ // Exit if accessed directly.
11
+ if ( ! defined( 'ABSPATH' ) ) {
12
+ exit;
13
+ }
14
+ global $woocommerce;
15
+ $help_tip_text = version_compare( $woocommerce->version, '3.0.0', '>=' ) ? 'help_tip_filter_3.0' : 'help_tip_filter';
16
+
17
+ // Args sent to the template.
18
+ $selected_all = 'all' === $match ? 'selected' : '';
19
+ $selected_any = 'any' === $match ? 'selected' : '';
20
+ $rules_setup = is_array( $rules ) && count( $rules ) > 0 ? $rules : array();
21
+ // Get the row data.
22
+ ob_start();
23
+ wc_get_template(
24
+ 'html-atc-rules-add-row.php',
25
+ '',
26
+ 'woocommerce-abandoned-cart/',
27
+ WCAL_PLUGIN_PATH . '/includes/templates/atc-rules/'
28
+ );
29
+ $row = ob_get_clean();
30
+ $row = apply_filters( 'wcap_atc_rules_engine_add_row_content', $row );
31
+ ?>
32
+ <table class='wcap_atc_content wcap_atc_between_fields_space'>
33
+ <th class='wcap_button_section_table_heading'>
34
+ <?php esc_html_e( 'Match Rules:', 'woocommerce-ac' ); ?>
35
+ </th>
36
+ <tr>
37
+ <td>
38
+ <select class='' id='wcap_match_rules' name='wcap_match_rules' disabled>
39
+ <option value='all' <?php echo esc_attr( $selected_all ); ?>><?php esc_html_e( 'Match all rules', 'woocommerce-ac' ); ?></option>
40
+ <option value='any' <?php echo esc_attr( $selected_any ); ?>><?php esc_html_e( 'Match any rule(s)', 'woocommerce-ac' ); ?></option>
41
+ </select>
42
+ <img id = <?php echo esc_html( $help_tip_text ); ?> class="help_tip" width="16" height="16" data-tip='<?php esc_html_e( 'ATC template will be displayed depending on whether all the rule matches are met or any rule matches.', 'woocommerce-ac' ); ?>' src="<?php echo esc_url( plugins_url() ); ?>/woocommerce/assets/images/help.png" /></p>
43
+ </td>
44
+ </tr>
45
+ <th class='wcap_button_section_table_heading'>
46
+ <label for='wcap_rules_1'>
47
+ <?php esc_html_e( 'Rules:', 'woocommerce-ac' ); ?>
48
+ </label>
49
+ </th>
50
+ <tr>
51
+ <td>
52
+ <table class='wcap-rule-list' id='wcap-rule-list' data-row='<?php echo esc_attr( $row ); ?>'>
53
+ <?php
54
+ $rule_head_style = ( count( $rules_setup ) > 0 ) ? 'style="display:table-header-group;"' : 'style=display:none;';
55
+ ?>
56
+ <thead id='wcap-rule-list-header' <?php echo esc_attr( $rule_head_style ); ?>>
57
+ <tr>
58
+ <th><?php echo esc_html__( 'Rule Type', 'woocommerce-ac' ); ?></th>
59
+ <th><?php echo esc_html__( 'Conditions', 'woocommerce-ac' ); ?></th>
60
+ <th><?php echo esc_html__( 'Values', 'woocommerce-ac' ); ?></th>
61
+ <th><?php echo esc_html__( 'Actions', 'woocommerce-ac' ); ?></th>
62
+ </tr>
63
+ </thead>
64
+ <tbody id='wcap-rule-list-body'>
65
+ <?php
66
+ if ( count( $rules_setup ) > 0 ) {
67
+ $count = count( $rules_setup );
68
+ $i = 1;
69
+ foreach ( $rules_setup as $rule_data ) {
70
+ $last_row = $i === $count ? true : false;
71
+ $rule_emails = isset( $rule_data->emails ) ? $rule_data->emails : '';
72
+ $edit_row = apply_filters(
73
+ 'wcap_atc_rules_engine_edit_row_data',
74
+ array(
75
+ 'rule_type' => $rule_data->rule_type,
76
+ 'rule_condition' => $rule_data->rule_condition,
77
+ 'rule_value' => $rule_data->rule_value,
78
+ 'rule_emails' => $rule_emails,
79
+ 'last_row' => $last_row,
80
+ 'row_id' => $i,
81
+ )
82
+ );
83
+ ?>
84
+ <tr id='<?php echo esc_attr( $i ); ?>'>
85
+ <?php
86
+ wc_get_template(
87
+ 'html-atc-rules-edit-row.php',
88
+ $edit_row,
89
+ 'woocommerce-abandoned-cart/',
90
+ WCAL_PLUGIN_PATH . '/includes/templates/atc-rules/'
91
+ );
92
+ ?>
93
+ </tr>
94
+ <?php
95
+ $i++;
96
+ }
97
+ }
98
+ ?>
99
+ </tbody>
100
+ <tfoot>
101
+ <tr class="wcap_rule_list_footer_tr">
102
+ <td id="wcap_rule_list_footer" colspan="4">
103
+ <?php
104
+ if ( count( $rules_setup ) === 0 ) {
105
+ ?>
106
+ <a
107
+ href="javascript:void(0)"
108
+ id="add_new"
109
+ class="button add-new-row"
110
+ onclick="wcap_add_new_rule_row( this.id )"
111
+ disabled>
112
+ <?php esc_html_e( 'Add new', 'woocommerce-ac' ); ?>
113
+ </a>
114
+ <?php
115
+ }
116
+ ?>
117
+ </td>
118
+ </tr>
119
+ </tfoot>
120
+ </table>
121
+ </td>
122
+ </tr>
123
+ </table>
includes/templates/rules/html-rules-add-row.php ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This file will add functions related to verifying email present on ATC field.
4
+ *
5
+ * @author Tyche Softwares
6
+ * @package Abandoned-Cart-Pro-for-WooCommerce/Admin/ATC
7
+ * @since 8.8.0
8
+ */
9
+
10
+ // Exit if accessed directly.
11
+ if ( ! defined( 'ABSPATH' ) ) {
12
+ exit;
13
+ }
14
+
15
+ $rule_type_options = apply_filters(
16
+ 'wcap_rules_engine_rule_type_values',
17
+ array(
18
+ 'select_disabled' => __( 'Select Rule Type', 'woocommerce-ac' ),
19
+ 'coupons' => __( 'Coupons', 'woocommerce-ac' ),
20
+ 'send_to' => __( 'Send Emails to', 'woocommerce-ac' ),
21
+ 'order_disabled' => __( 'Order', 'woocommerce-ac' ),
22
+ 'payment_gateways' => __( 'Payment Gateways', 'woocommerce-ac' ),
23
+ 'cart_disabled' => __( 'Cart', 'woocommerce-ac' ),
24
+ 'cart_status' => __( 'Cart Status', 'woocommerce-ac' ),
25
+ 'product_cat' => __( 'Product Categories', 'woocommerce-ac' ),
26
+ 'product_tag' => __( 'Product Tags', 'woocommerce-ac' ),
27
+ 'cart_items' => __( 'Cart Items', 'woocommerce-ac' ),
28
+ 'cart_items_count' => __( 'Number of Cart Items', 'woocommerce-ac' ),
29
+ 'cart_total' => __( 'Cart Total', 'woocommerce-ac' ),
30
+ )
31
+ );
32
+
33
+ $rule_condition_options = apply_filters(
34
+ 'wcap_rules_engine_rule_condition_values',
35
+ array(
36
+ 'select_disabled' => __( 'Select Condition', 'woocommerce-ac' ),
37
+ 'includes' => __( 'Includes any of', 'woocommerce-ac' ),
38
+ 'excludes' => __( 'Excludes any of', 'woocommerce-ac' ),
39
+ 'greater_than_equal_to' => __( 'Greater than or equal to', 'woocommerce-ac' ),
40
+ 'equal_to' => __( 'Equal to', 'woocommerce-ac' ),
41
+ 'less_than_equal_to' => __( 'Less than or equal to', 'woocommerce-ac' ),
42
+ )
43
+ );
44
+ ?>
45
+ <td class='wcap_rule_type_col'>
46
+ <select class='wcap_rule_type' id='wcap_rule_type_' name='wcap_rule_type_' onChange='wcap_rule_values( this.id )'>
47
+ <?php
48
+ foreach ( $rule_type_options as $type_key => $type_value ) {
49
+ $disabled = '';
50
+ $selected = 'select_disabled' === $type_key ? 'selected' : '';
51
+ if ( strpos( $type_key, 'disabled' ) !== false ) {
52
+ $type_key = '';
53
+ $disabled = 'disabled';
54
+ }
55
+
56
+ if ( in_array( $type_key, array( 'cart_status', 'payment_gateways', 'product_cat', 'product_tag', 'cart_items', 'cart_items_count', 'cart_total' ) ) ) { // phpcs:ignore
57
+ $type_value = '→ ' . $type_value;
58
+ $class = 'wcap_rule_subcategory';
59
+ } else {
60
+ $class = 'wcap_rule_parent_category';
61
+ }
62
+ echo sprintf(
63
+ "<option value='%s' %s %s class='%s'>%s</option>",
64
+ esc_attr( $type_key ),
65
+ esc_attr( $disabled ),
66
+ esc_attr( $selected ),
67
+ esc_attr( $class ),
68
+ esc_html( $type_value )
69
+ );
70
+ }
71
+ ?>
72
+ </select>
73
+ </td>
74
+ <td class='wcap_rule_condition_col'>
75
+ <select class='wcap_rule_condition' id='wcap_rule_condition_' name='wcap_rule_condition_'>
76
+ <?php
77
+ foreach ( $rule_condition_options as $cond_key => $cond_value ) {
78
+ $disabled = '';
79
+
80
+ if ( strpos( $cond_key, 'disabled' ) !== false ) {
81
+ $cond_key = '';
82
+ $disabled = 'disabled';
83
+ }
84
+ echo sprintf(
85
+ "<option value='%s' %s>%s</option>",
86
+ esc_attr( $cond_key ),
87
+ esc_attr( $disabled ),
88
+ esc_html( $cond_value )
89
+ );
90
+ }
91
+ ?>
92
+ </select>
93
+ </td>
94
+ <td class='wcap_rule_value_col'>
95
+ <select class='wcap_rule_value' id='wcap_rule_value_' name='wcap_rule_value_'>
96
+ <option value='' disabled selected><?php esc_html_e( 'Select values', 'woocommerce-ac' ); ?></option>
97
+ </select>
98
+ </td>
99
+ <td>
100
+ <a href='javascript:void(0)' class='wcap_delete_rule_button'>
101
+ <i class='fa fa-trash fa-lg fa-fw' id='wcap_rule_delete_' onclick='wcap_delete_rule_row( this.id )'></i>
102
+ </a>
103
+ <a href='javascript:void(0)' class='wcap_add_rule_button' id='add_new' onclick='wcap_add_new_rule_row( this.id )'>
104
+ <i class='fa fa-plus fa-lg fa-fw'></i>
105
+ <?php echo esc_html__( 'Add Rule', 'woocommerce-ac' ); ?>
106
+ </a>
107
+ </td>
includes/templates/rules/html-rules-edit-row.php ADDED
@@ -0,0 +1,286 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This file will add functions related to verifying email present on ATC field.
4
+ *
5
+ * @author Tyche Softwares
6
+ * @package Abandoned-Cart-Pro-for-WooCommerce/Admin/ATC
7
+ * @since 8.8.0
8
+ */
9
+
10
+ // Exit if accessed directly.
11
+ if ( ! defined( 'ABSPATH' ) ) {
12
+ exit;
13
+ }
14
+
15
+ $selected_rule_type = isset( $rule_type ) ? $rule_type : '';
16
+ $selected_rule_cond = isset( $rule_condition ) ? $rule_condition : '';
17
+ $selected_rule_value = isset( $rule_value ) ? $rule_value : '';
18
+
19
+ $rule_type_options = apply_filters(
20
+ 'wcap_rules_engine_rule_type_values',
21
+ array(
22
+ 'select_disabled' => __( 'Select Rule Type', 'woocommerce-ac' ),
23
+ 'coupons' => __( 'Coupons', 'woocommerce-ac' ),
24
+ 'send_to' => __( 'Send Emails to', 'woocommerce-ac' ),
25
+ 'order_disabled' => __( 'Order', 'woocommerce-ac' ),
26
+ 'payment_gateways' => __( 'Payment Gateways', 'woocommerce-ac' ),
27
+ 'cart_disabled' => __( 'Cart', 'woocommerce-ac' ),
28
+ 'cart_status' => __( 'Cart Status', 'woocommerce-ac' ),
29
+ 'product_cat' => __( 'Product Categories', 'woocommerce-ac' ),
30
+ 'product_tag' => __( 'Product Tags', 'woocommerce-ac' ),
31
+ 'cart_items' => __( 'Cart Items', 'woocommerce-ac' ),
32
+ 'cart_items_count' => __( 'Number of Cart Items', 'woocommerce-ac' ),
33
+ 'cart_total' => __( 'Cart Total', 'woocommerce-ac' ),
34
+ )
35
+ );
36
+
37
+ switch ( $selected_rule_type ) {
38
+ case 'cart_items_count':
39
+ case 'cart_total':
40
+ $rule_condition_options = array(
41
+ 'greater_than_equal_to' => __( 'Greater than or equal to', 'woocommerce-ac' ),
42
+ 'equal_to' => __( 'Equal to', 'woocommerce-ac' ),
43
+ 'less_than_equal_to' => __( 'Less than or equal to', 'woocommerce-ac' ),
44
+ );
45
+ $style = '';
46
+ break;
47
+ default:
48
+ $rule_condition_options = array(
49
+ 'includes' => __( 'Includes any of', 'woocommerce-ac' ),
50
+ 'excludes' => __( 'Excludes any of', 'woocommerce-ac' ),
51
+ );
52
+ $style = 'width:80%;';
53
+ break;
54
+ }
55
+ $rule_condition_options = apply_filters( 'wcap_rules_engine_rule_condition_values', $rule_condition_options );
56
+
57
+ $rule_value_array = array();
58
+ switch ( $selected_rule_type ) {
59
+ case 'payment_gateways':
60
+ $wc_payment_gateways = new WC_Payment_Gateways();
61
+ $payment_gateways = $wc_payment_gateways->payment_gateways();
62
+ foreach ( $payment_gateways as $slug => $gateways ) {
63
+ if ( 'yes' === $gateways->enabled ) {
64
+ $rule_value_array[ $slug ] = $gateways->title;
65
+ }
66
+ }
67
+ break;
68
+ case 'cart_status':
69
+ $rule_value_array = array(
70
+ 'abandoned' => __( 'Abandoned', 'woocommerce-ac' ),
71
+ 'abandoned-pending' => __( 'Abandoned - Pending Payment', 'woocommerce-ac' ),
72
+ 'abandoned-cancelled' => __( 'Abandoned - Order Cancelled', 'woocommerce-ac' ),
73
+ );
74
+ break;
75
+ case 'send_to':
76
+ $rule_value_array = array(
77
+ 'all' => __( 'All', 'woocommerce-ac' ),
78
+ 'registered_users' => __( 'Registered Users', 'woocommerce-ac' ),
79
+ 'guest_users' => __( 'Guest Users', 'woocommerce-ac' ),
80
+ 'wcap_email_customer' => __( 'Customers', 'woocommerce-ac' ),
81
+ 'wcap_email_admin' => __( 'Admin', 'woocommerce-ac' ),
82
+ 'wcap_email_customer_admin' => __( 'Customers & Admin', 'woocommerce-ac' ),
83
+ 'email_addresses' => __( 'Email Addresses', 'woocommerce-ac' ),
84
+ );
85
+ break;
86
+ }
87
+ $rule_value_array = apply_filters( 'wcap_rules_engine_rule_option_values', $rule_value_array );
88
+
89
+ $type_id = "wcap_rule_type_$row_id";
90
+ $cond_id = "wcap_rule_condition_$row_id";
91
+ $val_id = "wcap_rule_value_$row_id";
92
+ $delete_id = "wcap_rule_delete_$row_id";
93
+
94
+ ?>
95
+ <td class='wcap_rule_type_col'>
96
+ <select class='wcap_rule_type' id='<?php echo esc_attr( $type_id ); ?>' name='<?php echo esc_attr( $type_id ); ?>' onChange='wcap_rule_values( this.id )'>
97
+ <?php
98
+ foreach ( $rule_type_options as $type_key => $type_value ) {
99
+ $disabled = '';
100
+ $selected = '' === $selected_rule_type && 'selected_disabled' === $type_key ? 'selected' : '';
101
+ $selected = '' !== $selected_rule_type && $selected_rule_type === $type_key ? 'selected' : '';
102
+
103
+ if ( strpos( $type_key, 'disabled' ) !== false ) {
104
+ $type_key = '';
105
+ $disabled = 'disabled';
106
+ }
107
+
108
+ if ( in_array( $type_key, array( 'cart_status', 'payment_gateways', 'product_cat', 'product_tag', 'cart_items', 'cart_items_count', 'cart_total' ) ) ) { // phpcs:ignore
109
+ $type_value = '→ ' . $type_value;
110
+ $class = 'wcap_rule_subcategory';
111
+ } else {
112
+ $class = 'wcap_rule_parent_category';
113
+ }
114
+ echo sprintf(
115
+ "<option value='%s' %s %s class='%s'>%s</option>",
116
+ esc_attr( $type_key ),
117
+ esc_attr( $disabled ),
118
+ esc_attr( $selected ),
119
+ esc_attr( $class ),
120
+ esc_html( $type_value )
121
+ );
122
+ }
123
+ ?>
124
+ </select>
125
+ </td>
126
+ <td class='wcap_rule_condition_col'>
127
+ <select class='wcap_rule_condition' id='<?php echo esc_attr( $cond_id ); ?>' name='<?php echo esc_attr( $cond_id ); ?>' style='<?php echo esc_attr( $style ); ?>'>
128
+ <?php
129
+ foreach ( $rule_condition_options as $cond_key => $cond_value ) {
130
+ $disabled = '';
131
+ $selected = '' === $selected_rule_cond && 'selected_disabled' === $cond_key ? 'selected' : '';
132
+ $selected = '' !== $selected_rule_cond && $selected_rule_cond === $cond_key ? 'selected' : '';
133
+
134
+ if ( strpos( $cond_key, 'disabled' ) !== false ) {
135
+ $cond_key = '';
136
+ $disabled = 'disabled';
137
+ }
138
+ echo sprintf(
139
+ "<option value='%s' %s %s>%s</option>",
140
+ esc_attr( $cond_key ),
141
+ esc_attr( $disabled ),
142
+ esc_attr( $selected ),
143
+ esc_html( $cond_value )
144
+ );
145
+ }
146
+ ?>
147
+ </select>
148
+ </td>
149
+ <td class='wcap_rule_value_col'>
150
+ <?php
151
+ switch ( $selected_rule_type ) {
152
+ case 'send_to':
153
+ ?>
154
+ <select id='<?php echo esc_attr( $val_id ); ?>' name='<?php echo esc_attr( $val_id . '[]' ); ?>' class="wcap_rule_value wc-product-search" multiple="multiple" data-placeholder="<?php esc_attr_e( 'Search for options&hellip;', 'woocommerce' ); ?>" data-action="wcap_json_find_send_to" onChange='wcap_rule_value_updated( this.id )'>
155
+ <?php
156
+ foreach ( $selected_rule_value as $v_id ) {
157
+ if ( '' !== $v_id ) {
158
+ $v_object = $rule_value_array[ $v_id ];
159
+ echo '<option value="' . esc_attr( $v_id ) . '"' . selected( true, true, false ) . '>' . esc_html( $v_object ) . '</option>';
160
+ }
161
+ }
162
+ ?>
163
+ </select>
164
+ <?php
165
+ // Send to email addresses.
166
+ if ( in_array( 'email_addresses', $selected_rule_value, true ) ) {
167
+ ?>
168
+ <textarea name='wcap_rules_email_addresses' id='wcap_rules_email_addresses' rows='3' cols='35' placeholder='<?php esc_html_e( 'Please enter email addresses separated by a comma', 'woocommerce-ac' ); ?>'><?php echo esc_attr( $rule_emails ); ?></textarea>
169
+ <?php
170
+ }
171
+ break;
172
+ case 'payment_gateways':
173
+ ?>
174
+ <select class='wcap_rule_value' id='<?php echo esc_attr( $val_id ); ?>' name='<?php echo esc_attr( $val_id ); ?>'>
175
+ <?php
176
+ foreach ( $rule_value_array as $key => $value ) {
177
+ $selected = '' !== $selected_rule_value && $selected_rule_value === $key ? 'selected' : '';
178
+
179
+ echo sprintf(
180
+ "<option value='%s' %s>%s</option>",
181
+ esc_attr( $key ),
182
+ esc_attr( $selected ),
183
+ esc_html( $value )
184
+ );
185
+
186
+ }
187
+ ?>
188
+ </select>
189
+ <?php
190
+ break;
191
+ case 'cart_items_count':
192
+ case 'cart_total':
193
+ ?>
194
+ <input type='number' class='wcap_rule_value' min='1' id='<?php echo esc_attr( $val_id ); ?>' name='<?php echo esc_attr( $val_id ); ?>' value='<?php echo esc_attr( $selected_rule_value ); ?>' />
195
+ <?php
196
+ break;
197
+ case 'coupons':
198
+ ?>
199
+ <select id='<?php echo esc_attr( $val_id ); ?>' name='<?php echo esc_attr( $val_id . '[]' ); ?>' class="wcap_rule_value wc-product-search" multiple="multiple" data-placeholder="<?php esc_attr_e( 'Search for a Coupon&hellip;', 'woocommerce' ); ?>" data-action="wcap_json_find_coupons">
200
+ <?php
201
+ if ( is_array( $selected_rule_value ) && count( $selected_rule_value ) > 0 ) {
202
+ foreach ( $selected_rule_value as $v_id ) {
203
+ if ( $v_id > 0 ) {
204
+ $v_object = get_the_title( $v_id );
205
+ echo '<option value="' . esc_attr( $v_id ) . '"' . selected( true, true, false ) . '>' . wp_kses_post( $v_object ) . '</option>';
206
+ }
207
+ }
208
+ }
209
+ ?>
210
+ </select>
211
+ <?php
212
+ break;
213
+ case 'cart_status':
214
+ ?>
215
+ <select id='<?php echo esc_attr( $val_id ); ?>' name='<?php echo esc_attr( $val_id . '[]' ); ?>' class="wcap_rule_value wc-product-search" multiple="multiple" data-placeholder="<?php esc_attr_e( 'Search for a Status&hellip;', 'woocommerce' ); ?>" data-action="wcap_json_find_cart_status">
216
+ <?php
217
+ foreach ( $selected_rule_value as $v_id ) {
218
+ if ( '' !== $v_id ) {
219
+ $v_object = $rule_value_array[ $v_id ];
220
+ echo '<option value="' . esc_attr( $v_id ) . '"' . selected( true, true, false ) . '>' . esc_html( $v_object ) . '</option>';
221
+ }
222
+ }
223
+ ?>
224
+ </select>
225
+ <?php
226
+ break;
227
+ case 'product_cat':
228
+ ?>
229
+ <select id='<?php echo esc_attr( $val_id ); ?>' name='<?php echo esc_attr( $val_id . '[]' ); ?>' class="wcap_rule_value wc-product-search" multiple="multiple" data-placeholder="<?php esc_attr_e( 'Search for a Product Category&hellip;', 'woocommerce' ); ?>" data-action="wcap_json_find_product_cat">
230
+ <?php
231
+ foreach ( $selected_rule_value as $v_id ) {
232
+ if ( $v_id > 0 ) {
233
+ $v_object = get_term( $v_id );
234
+ echo '<option value="' . esc_attr( $v_id ) . '"' . selected( true, true, false ) . '>' . wp_kses_post( $v_object->name ) . '</option>';
235
+ }
236
+ }
237
+ ?>
238
+ </select>
239
+ <?php
240
+ break;
241
+ case 'product_tag':
242
+ ?>
243
+ <select id='<?php echo esc_attr( $val_id ); ?>' name='<?php echo esc_attr( $val_id . '[]' ); ?>' class="wcap_rule_value wc-product-search" multiple="multiple" data-placeholder="<?php esc_attr_e( 'Search for a Product Category&hellip;', 'woocommerce' ); ?>" data-action="wcap_json_find_product_tag">
244
+ <?php
245
+ foreach ( $selected_rule_value as $v_id ) {
246
+ if ( $v_id > 0 ) {
247
+ $v_object = get_term( $v_id );
248
+ echo '<option value="' . esc_attr( $v_id ) . '"' . selected( true, true, false ) . '>' . wp_kses_post( $v_object->name ) . '</option>';
249
+ }
250
+ }
251
+ ?>
252
+ </select>
253
+ <?php
254
+ break;
255
+ case 'cart_items':
256
+ ?>
257
+ <select id='<?php echo esc_attr( $val_id ); ?>' name='<?php echo esc_attr( $val_id . '[]' ); ?>' class="wcap_rule_value wc-product-search" multiple="multiple" data-placeholder="<?php esc_attr_e( 'Search for a Product&hellip;', 'woocommerce' ); ?>" data-action="wcap_json_find_products">
258
+ <?php
259
+ foreach ( $selected_rule_value as $v_id ) {
260
+ if ( $v_id > 0 ) {
261
+ $v_object = get_the_title( $v_id );
262
+ echo '<option value="' . esc_attr( $v_id ) . '"' . selected( true, true, false ) . '>' . wp_kses_post( $v_object ) . '</option>';
263
+ }
264
+ }
265
+ ?>
266
+ </select>
267
+ <?php
268
+ break;
269
+ }
270
+ ?>
271
+ </td>
272
+ <td>
273
+ <a href='javascript:void(0)' class='wcap_delete_rule_button'>
274
+ <i class='fa fa-trash fa-lg fa-fw' id='<?php echo esc_attr( $delete_id ); ?>' onclick='wcap_delete_rule_row( this.id )'></i>
275
+ </a>
276
+ <?php
277
+ if ( $last_row ) {
278
+ ?>
279
+ <a href='javascript:void(0)' class='wcap_add_rule_button' id='add_new' onclick='wcap_add_new_rule_row( this.id )'>
280
+ <i class='fa fa-plus fa-lg fa-fw'></i>
281
+ <?php echo esc_html__( 'Add Rule', 'woocommerce-ac' ); ?>
282
+ </a>
283
+ <?php
284
+ }
285
+ ?>
286
+ </td>
includes/templates/rules/html-rules-engine.php ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This file will add functions related to verifying email present on ATC field.
4
+ *
5
+ * @author Tyche Softwares
6
+ * @package Abandoned-Cart-Pro-for-WooCommerce/Admin/ATC
7
+ * @since 8.8.0
8
+ */
9
+
10
+ // Exit if accessed directly.
11
+ if ( ! defined( 'ABSPATH' ) ) {
12
+ exit;
13
+ }
14
+ global $woocommerce;
15
+ $help_tip_text = version_compare( $woocommerce->version, '3.0.0', '>=' ) ? 'help_tip_filter_3.0' : 'help_tip_filter';
16
+ $purchase_link = 'https://www.tychesoftwares.com/store/premium-plugins/woocommerce-abandoned-cart-pro/?utm_source=acupgradetopro&utm_medium=link&utm_campaign=AbandonCartLite';
17
+
18
+ // Args sent to the template.
19
+ $selected_all = 'all' === $match ? 'selected' : '';
20
+ $selected_any = 'any' === $match ? 'selected' : '';
21
+ $rules_setup = is_array( $rules ) && count( $rules ) > 0 ? $rules : array();
22
+ // Get the row data.
23
+ ob_start();
24
+ wc_get_template(
25
+ 'html-rules-add-row.php',
26
+ '',
27
+ 'woocommerce-abandoned-cart/',
28
+ WCAL_PLUGIN_PATH . '/includes/templates/rules/'
29
+ );
30
+ $row = ob_get_clean();
31
+ $row = apply_filters( 'wcap_rules_engine_add_row_content', $row );
32
+ ?>
33
+ <table class='form-table'>
34
+ <tr>
35
+ <th>
36
+ <label for='wcap_match_rules'>
37
+ <?php esc_html_e( 'Match Rules:', 'woocommerce-ac' ); ?>
38
+ </label>
39
+ </th>
40
+ <td>
41
+ <select class='' id='wcap_match_rules' name='wcap_match_rules' disabled>
42
+ <option value='all' <?php echo esc_attr( $selected_all ); ?>><?php esc_html_e( 'Match all rules', 'woocommerce-ac' ); ?></option>
43
+ <option value='any' <?php echo esc_attr( $selected_any ); ?>><?php esc_html_e( 'Match any rule(s)', 'woocommerce-ac' ); ?></option>
44
+ </select>
45
+ <img id = <?php echo esc_html( $help_tip_text ); ?> class="help_tip" width="16" height="16" data-tip='<?php esc_html_e( 'Email template will be sent depending on whether all the rule matches are met or any rule matches.', 'woocommerce-ac' ); ?>' src="<?php echo esc_url( plugins_url() ); ?>/woocommerce/assets/images/help.png" /></p>
46
+ </td>
47
+ </tr>
48
+ <th>
49
+ <label for='wcap_rules_1'>
50
+ <?php esc_html_e( 'Rules:', 'woocommerce-ac' ); ?>
51
+ </label>
52
+ </th>
53
+ <td>
54
+ <table class='wcap-rule-list form-table' id='wcap-rule-list' data-row='<?php echo esc_attr( $row ); ?>'>
55
+ <?php
56
+ $rule_head_style = ( count( $rules_setup ) > 0 ) ? 'style="display:table-header-group;"' : 'style=display:none;';
57
+ ?>
58
+ <thead id='wcap-rule-list-header' <?php echo esc_attr( $rule_head_style ); ?>>
59
+ <tr>
60
+ <th><?php echo esc_html__( 'Rule Type', 'woocommerce-ac' ); ?></th>
61
+ <th><?php echo esc_html__( 'Conditions', 'woocommerce-ac' ); ?></th>
62
+ <th><?php echo esc_html__( 'Values', 'woocommerce-ac' ); ?></th>
63
+ <th><?php echo esc_html__( 'Actions', 'woocommerce-ac' ); ?></th>
64
+ </tr>
65
+ </thead>
66
+ <tbody id='wcap-rule-list-body'>
67
+ <?php
68
+ if ( count( $rules_setup ) > 0 ) {
69
+ $count = count( $rules_setup );
70
+ $i = 1;
71
+ foreach ( $rules_setup as $rule_data ) {
72
+ $last_row = $i === $count ? true : false;
73
+ $rule_emails = isset( $rule_data->emails ) ? $rule_data->emails : '';
74
+ $edit_row = apply_filters(
75
+ 'wcap_rules_engine_edit_row_data',
76
+ array(
77
+ 'rule_type' => $rule_data->rule_type,
78
+ 'rule_condition' => $rule_data->rule_condition,
79
+ 'rule_value' => $rule_data->rule_value,
80
+ 'rule_emails' => $rule_emails,
81
+ 'last_row' => $last_row,
82
+ 'row_id' => $i,
83
+ )
84
+ );
85
+ ?>
86
+ <tr id='<?php echo esc_attr( $i ); ?>'>
87
+ <?php
88
+ wc_get_template(
89
+ 'html-rules-edit-row.php',
90
+ $edit_row,
91
+ 'woocommerce-abandoned-cart/',
92
+ WCAL_PLUGIN_PATH . '/includes/templates/rules/'
93
+ );
94
+ ?>
95
+ </tr>
96
+ <?php
97
+ $i++;
98
+ }
99
+ }
100
+ ?>
101
+ </tbody>
102
+ <tfoot>
103
+ <tr class="wcap_rule_list_footer_tr">
104
+ <td id="wcap_rule_list_footer" colspan="4">
105
+ <?php
106
+ esc_html_e( 'Add rules as needed to create different email templates for different user bases. ', 'woocommerce-abandoned-cart' );
107
+ // Translators: Plugin purchase Link.
108
+ printf( wp_kses_post( __( "<b><i>Upgrade to <a href='%s' target='_blank'>Abandoned Cart Pro for WooCommerce</a> to enable the feature.</i></b>", 'woocommerce-abandoned-cart' ) ), esc_url( $purchase_link ) );
109
+ ?>
110
+ <br>
111
+ <?php
112
+ if ( count( $rules_setup ) === 0 ) {
113
+ ?>
114
+ <a
115
+ href="javascript:void(0)"
116
+ id="add_new"
117
+ class="button add-new-row"
118
+ onclick="wcap_add_new_rule_row( this.id )"
119
+ disabled >
120
+ <?php esc_html_e( 'Add new', 'woocommerce-ac' ); ?>
121
+ </a>
122
+ <?php
123
+ }
124
+ ?>
125
+ </td>
126
+ </tr>
127
+ </tfoot>
128
+ </table>
129
+ </td>
130
+ </table>
readme.txt CHANGED
@@ -222,6 +222,12 @@ The admin can use the merge code `{{cart.unsubscribe}}' in the email templates.
222
  6. Product Report Tab.
223
 
224
  == Changelog ==
 
 
 
 
 
 
225
  = 5.8.7 (26.03.2021) =
226
  * Fix - Variation Image is not displayed in reminder emails.
227
 
222
  6. Product Report Tab.
223
 
224
  == Changelog ==
225
+ = 5.8.8 (06.04.2021) =
226
+ * Enhancement - Introduced Abandoned & Recovered Cart data graph in the plugin dashboard.
227
+ * Tweak - Updated the Pro settings to reflect the new settings included in the Pro Version.
228
+ * Fix - The link to FB Settings documentation was not working.
229
+ * Fix - The merge tags {{cart.abandoned_date}}, {{cart.link}}, {{cart.unsubscribe}} were not being replaced with test data when previewing a reminder email template.
230
+
231
  = 5.8.7 (26.03.2021) =
232
  * Fix - Variation Image is not displayed in reminder emails.
233
 
woocommerce-ac.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Abandoned Cart Lite for WooCommerce
4
  * Plugin URI: http://www.tychesoftwares.com/store/premium-plugins/woocommerce-abandoned-cart-pro
5
  * Description: This plugin captures abandoned carts by logged-in users & emails them about it. <strong><a href="http://www.tychesoftwares.com/store/premium-plugins/woocommerce-abandoned-cart-pro">Click here to get the PRO Version.</a></strong>
6
- * Version: 5.8.7
7
  * Author: Tyche Softwares
8
  * Author URI: http://www.tychesoftwares.com/
9
  * Text Domain: woocommerce-abandoned-cart
@@ -118,7 +118,11 @@ if ( ! class_exists( 'woocommerce_abandon_cart_lite' ) ) {
118
  }
119
 
120
  if ( ! defined( 'WCAL_PLUGIN_VERSION' ) ) {
121
- define( 'WCAL_PLUGIN_VERSION', '5.8.7' );
 
 
 
 
122
  }
123
  $this->one_hour = 60 * 60;
124
  $this->three_hours = 3 * $this->one_hour;
@@ -371,15 +375,25 @@ if ( ! class_exists( 'woocommerce_abandon_cart_lite' ) ) {
371
 
372
  </tbody>
373
  </table>';
374
- $replace_data['admin_phone'] = $admin_phone;
375
- $replace_data['site_title'] = get_bloginfo( 'name' );
376
- $replace_data['site_url'] = get_option( 'siteurl' );
 
 
 
 
 
 
 
377
 
378
  $content = str_ireplace( '{{products.cart}}', $replace_data['products_cart'], $content );
379
  $content = str_ireplace( '{{admin.phone}}', $replace_data['admin_phone'], $content );
380
  $content = str_ireplace( '{{customer.firstname}}', 'John', $content );
381
  $content = str_ireplace( '{{customer.lastname}}', 'Doe', $content );
382
  $content = str_ireplace( '{{customer.fullname}}', 'John Doe', $content );
 
 
 
383
  $content = str_ireplace( 'site_title', $replace_data['site_title'], $content );
384
  $content = str_ireplace( 'site_url', $replace_data['site_url'], $content );
385
 
@@ -2075,8 +2089,9 @@ if ( ! class_exists( 'woocommerce_abandon_cart_lite' ) ) {
2075
  WCAL_PLUGIN_VERSION,
2076
  false
2077
  );
2078
- $mode = isset( $_GET['mode'] ) ? sanitize_text_field( wp_unslash( $_GET['mode'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification
2079
- if ( 'emailtemplates' === $action && ( 'addnewtemplate' === $mode || 'edittemplate' === $mode ) ) {
 
2080
  wp_register_script( 'woocommerce_admin', WC()->plugin_url() . '/assets/js/admin/woocommerce_admin.min.js', array( 'jquery', 'jquery-tiptip' ), WCAL_PLUGIN_VERSION, false );
2081
  wp_enqueue_script( 'woocommerce_admin' );
2082
  $locale = localeconv();
@@ -2142,6 +2157,14 @@ if ( ! class_exists( 'woocommerce_abandon_cart_lite' ) ) {
2142
  );
2143
 
2144
  wp_enqueue_script(
 
 
 
 
 
 
 
 
2145
  'reports_js',
2146
  plugins_url( '/assets/js/admin/wcal_adv_dashboard.min.js', __FILE__ ),
2147
  '',
@@ -3231,6 +3254,17 @@ if ( ! class_exists( 'woocommerce_abandon_cart_lite' ) ) {
3231
  <div> <!-- <div class="postbox" > -->
3232
  <h3 class="hndle"><?php esc_html_e( $display_message, 'woocommerce-abandoned-cart' ); // phpcs:ignore?></h3>
3233
  <div>
 
 
 
 
 
 
 
 
 
 
 
3234
  <table class="form-table" id="addedit_template">
3235
  <tr>
3236
  <th>
3
  * Plugin Name: Abandoned Cart Lite for WooCommerce
4
  * Plugin URI: http://www.tychesoftwares.com/store/premium-plugins/woocommerce-abandoned-cart-pro
5
  * Description: This plugin captures abandoned carts by logged-in users & emails them about it. <strong><a href="http://www.tychesoftwares.com/store/premium-plugins/woocommerce-abandoned-cart-pro">Click here to get the PRO Version.</a></strong>
6
+ * Version: 5.8.8
7
  * Author: Tyche Softwares
8
  * Author URI: http://www.tychesoftwares.com/
9
  * Text Domain: woocommerce-abandoned-cart
118
  }
119
 
120
  if ( ! defined( 'WCAL_PLUGIN_VERSION' ) ) {
121
+ define( 'WCAL_PLUGIN_VERSION', '5.8.8' );
122
+ }
123
+
124
+ if ( ! defined( 'WCAL_PLUGIN_PATH' ) ) {
125
+ define( 'WCAL_PLUGIN_PATH', untrailingslashit( plugin_dir_path( __FILE__ ) ) );
126
  }
127
  $this->one_hour = 60 * 60;
128
  $this->three_hours = 3 * $this->one_hour;
375
 
376
  </tbody>
377
  </table>';
378
+
379
+ $current_time = current_time( 'timestamp' ); // phpcs:ignore
380
+ $date_format = date_i18n( get_option( 'date_format' ), $current_time );
381
+ $time_format = date_i18n( get_option( 'time_format' ), $current_time );
382
+
383
+ $replace_data['admin_phone'] = $admin_phone;
384
+ $replace_data['site_title'] = get_bloginfo( 'name' );
385
+ $replace_data['site_url'] = get_option( 'siteurl' );
386
+ $replace_data['abandoned_date'] = "$date_format $time_format";
387
+ $replace_data['cart_url'] = wc_get_page_permalink( 'cart' );
388
 
389
  $content = str_ireplace( '{{products.cart}}', $replace_data['products_cart'], $content );
390
  $content = str_ireplace( '{{admin.phone}}', $replace_data['admin_phone'], $content );
391
  $content = str_ireplace( '{{customer.firstname}}', 'John', $content );
392
  $content = str_ireplace( '{{customer.lastname}}', 'Doe', $content );
393
  $content = str_ireplace( '{{customer.fullname}}', 'John Doe', $content );
394
+ $content = str_ireplace( '{{cart.abandoned_date}}', $replace_data['abandoned_date'], $content );
395
+ $content = str_ireplace( '{{cart.link}}', $replace_data['cart_url'], $content );
396
+ $content = str_ireplace( '{{cart.unsubscribe}}', '#', $content );
397
  $content = str_ireplace( 'site_title', $replace_data['site_title'], $content );
398
  $content = str_ireplace( 'site_url', $replace_data['site_url'], $content );
399
 
2089
  WCAL_PLUGIN_VERSION,
2090
  false
2091
  );
2092
+ $mode = isset( $_GET['mode'] ) ? sanitize_text_field( wp_unslash( $_GET['mode'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification
2093
+ $wcal_section = isset( $_GET['wcal_section'] ) ? sanitize_text_field( wp_unslash( $_GET['wcal_section'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification
2094
+ if ( ( 'emailtemplates' === $action && ( 'addnewtemplate' === $mode || 'edittemplate' === $mode ) ) || ( 'emailsettings' === $action && 'wcap_atc_settings' === $wcal_section ) ) {
2095
  wp_register_script( 'woocommerce_admin', WC()->plugin_url() . '/assets/js/admin/woocommerce_admin.min.js', array( 'jquery', 'jquery-tiptip' ), WCAL_PLUGIN_VERSION, false );
2096
  wp_enqueue_script( 'woocommerce_admin' );
2097
  $locale = localeconv();
2157
  );
2158
 
2159
  wp_enqueue_script(
2160
+ 'd3_js',
2161
+ WCAL_PLUGIN_URL . '/assets/js/admin/d3.v3.min.js',
2162
+ '',
2163
+ WCAL_PLUGIN_VERSION,
2164
+ false
2165
+ );
2166
+
2167
+ wp_register_script(
2168
  'reports_js',
2169
  plugins_url( '/assets/js/admin/wcal_adv_dashboard.min.js', __FILE__ ),
2170
  '',
3254
  <div> <!-- <div class="postbox" > -->
3255
  <h3 class="hndle"><?php esc_html_e( $display_message, 'woocommerce-abandoned-cart' ); // phpcs:ignore?></h3>
3256
  <div>
3257
+ <?php
3258
+ wc_get_template(
3259
+ 'html-rules-engine.php',
3260
+ array(
3261
+ 'rules' => array(),
3262
+ 'match' => 'all',
3263
+ ),
3264
+ 'woocommerce-abandoned-cart/',
3265
+ WCAL_PLUGIN_PATH . '/includes/templates/rules/'
3266
+ );
3267
+ ?>
3268
  <table class="form-table" id="addedit_template">
3269
  <tr>
3270
  <th>