|
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<title>Code coverage report for lib/json3.js</title>
|
|
<meta charset="utf-8">
|
|
|
|
<link rel="stylesheet" href="../prettify.css">
|
|
|
|
<style>
|
|
body, html {
|
|
margin:0; padding: 0;
|
|
}
|
|
body {
|
|
font-family: Helvetica Neue, Helvetica,Arial;
|
|
font-size: 10pt;
|
|
}
|
|
div.header, div.footer {
|
|
background: #eee;
|
|
padding: 1em;
|
|
}
|
|
div.header {
|
|
z-index: 100;
|
|
position: fixed;
|
|
top: 0;
|
|
border-bottom: 1px solid #666;
|
|
width: 100%;
|
|
}
|
|
div.footer {
|
|
border-top: 1px solid #666;
|
|
}
|
|
div.body {
|
|
margin-top: 10em;
|
|
}
|
|
div.meta {
|
|
font-size: 90%;
|
|
text-align: center;
|
|
}
|
|
h1, h2, h3 {
|
|
font-weight: normal;
|
|
}
|
|
h1 {
|
|
font-size: 12pt;
|
|
}
|
|
h2 {
|
|
font-size: 10pt;
|
|
}
|
|
pre {
|
|
font-family: Consolas, Menlo, Monaco, monospace;
|
|
margin: 0;
|
|
padding: 0;
|
|
line-height: 14px;
|
|
font-size: 14px;
|
|
-moz-tab-size: 2;
|
|
-o-tab-size: 2;
|
|
tab-size: 2;
|
|
}
|
|
|
|
div.path { font-size: 110%; }
|
|
div.path a:link, div.path a:visited { color: #000; }
|
|
table.coverage { border-collapse: collapse; margin:0; padding: 0 }
|
|
|
|
table.coverage td {
|
|
margin: 0;
|
|
padding: 0;
|
|
color: #111;
|
|
vertical-align: top;
|
|
}
|
|
table.coverage td.line-count {
|
|
width: 50px;
|
|
text-align: right;
|
|
padding-right: 5px;
|
|
}
|
|
table.coverage td.line-coverage {
|
|
color: #777 !important;
|
|
text-align: right;
|
|
border-left: 1px solid #666;
|
|
border-right: 1px solid #666;
|
|
}
|
|
|
|
table.coverage td.text {
|
|
}
|
|
|
|
table.coverage td span.cline-any {
|
|
display: inline-block;
|
|
padding: 0 5px;
|
|
width: 40px;
|
|
}
|
|
table.coverage td span.cline-neutral {
|
|
background: #eee;
|
|
}
|
|
table.coverage td span.cline-yes {
|
|
background: #b5d592;
|
|
color: #999;
|
|
}
|
|
table.coverage td span.cline-no {
|
|
background: #fc8c84;
|
|
}
|
|
|
|
.cstat-yes { color: #111; }
|
|
.cstat-no { background: #fc8c84; color: #111; }
|
|
.fstat-no { background: #ffc520; color: #111 !important; }
|
|
.cbranch-no { background: yellow !important; color: #111; }
|
|
.missing-if-branch {
|
|
display: inline-block;
|
|
margin-right: 10px;
|
|
position: relative;
|
|
padding: 0 4px;
|
|
background: black;
|
|
color: yellow;
|
|
xtext-decoration: line-through;
|
|
}
|
|
.missing-if-branch .typ {
|
|
color: inherit !important;
|
|
}
|
|
|
|
.entity, .metric { font-weight: bold; }
|
|
.metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }
|
|
.metric small { font-size: 80%; font-weight: normal; color: #666; }
|
|
|
|
div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }
|
|
div.coverage-summary td, div.coverage-summary table th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }
|
|
div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }
|
|
div.coverage-summary th.file { border-right: none !important; }
|
|
div.coverage-summary th.pic { border-left: none !important; text-align: right; }
|
|
div.coverage-summary th.pct { border-right: none !important; }
|
|
div.coverage-summary th.abs { border-left: none !important; text-align: right; }
|
|
div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }
|
|
div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }
|
|
div.coverage-summary td.file { text-align: right; border-left: 1px solid #666; white-space: nowrap; }
|
|
div.coverage-summary td.pic { min-width: 120px !important; }
|
|
div.coverage-summary a:link { text-decoration: none; color: #000; }
|
|
div.coverage-summary a:visited { text-decoration: none; color: #333; }
|
|
div.coverage-summary a:hover { text-decoration: underline; }
|
|
div.coverage-summary tfoot td { border-top: 1px solid #666; }
|
|
|
|
div.coverage-summary .yui3-datatable-sort-indicator, div.coverage-summary .dummy-sort-indicator {
|
|
height: 10px;
|
|
width: 7px;
|
|
display: inline-block;
|
|
margin-left: 0.5em;
|
|
}
|
|
div.coverage-summary .yui3-datatable-sort-indicator {
|
|
background: url("http://yui.yahooapis.com/3.6.0/build/datatable-sort/assets/skins/sam/sort-arrow-sprite.png") no-repeat scroll 0 0 transparent;
|
|
}
|
|
div.coverage-summary .yui3-datatable-sorted .yui3-datatable-sort-indicator {
|
|
background-position: 0 -20px;
|
|
}
|
|
div.coverage-summary .yui3-datatable-sorted-desc .yui3-datatable-sort-indicator {
|
|
background-position: 0 -10px;
|
|
}
|
|
|
|
.high { background: #b5d592 !important; }
|
|
.medium { background: #ffe87c !important; }
|
|
.low { background: #fc8c84 !important; }
|
|
|
|
span.cover-fill, span.cover-empty {
|
|
display:inline-block;
|
|
border:1px solid #444;
|
|
background: white;
|
|
height: 12px;
|
|
}
|
|
span.cover-fill {
|
|
background: #ccc;
|
|
border-right: 1px solid #444;
|
|
}
|
|
span.cover-empty {
|
|
background: white;
|
|
border-left: none;
|
|
}
|
|
span.cover-full {
|
|
border-right: none !important;
|
|
}
|
|
pre.prettyprint {
|
|
border: none !important;
|
|
padding: 0 !important;
|
|
margin: 0 !important;
|
|
}
|
|
.com { color: #999 !important; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="header low">
|
|
<h1>Code coverage report for <span class="entity">lib/json3.js</span></h1>
|
|
<h2>
|
|
|
|
Statements: <span class="metric">13.77% <small>(50 / 363)</small></span>
|
|
|
|
|
|
Branches: <span class="metric">15.32% <small>(59 / 385)</small></span>
|
|
|
|
|
|
Functions: <span class="metric">11.54% <small>(3 / 26)</small></span>
|
|
|
|
|
|
Lines: <span class="metric">13.77% <small>(50 / 363)</small></span>
|
|
|
|
</h2>
|
|
<div class="path"><a href="../index.html">All files</a> » <a href="index.html">lib/</a> » json3.js</div>
|
|
</div>
|
|
<div class="body">
|
|
<pre><table class="coverage">
|
|
<tr><td class="line-count">1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|
|
16
|
|
17
|
|
18
|
|
19
|
|
20
|
|
21
|
|
22
|
|
23
|
|
24
|
|
25
|
|
26
|
|
27
|
|
28
|
|
29
|
|
30
|
|
31
|
|
32
|
|
33
|
|
34
|
|
35
|
|
36
|
|
37
|
|
38
|
|
39
|
|
40
|
|
41
|
|
42
|
|
43
|
|
44
|
|
45
|
|
46
|
|
47
|
|
48
|
|
49
|
|
50
|
|
51
|
|
52
|
|
53
|
|
54
|
|
55
|
|
56
|
|
57
|
|
58
|
|
59
|
|
60
|
|
61
|
|
62
|
|
63
|
|
64
|
|
65
|
|
66
|
|
67
|
|
68
|
|
69
|
|
70
|
|
71
|
|
72
|
|
73
|
|
74
|
|
75
|
|
76
|
|
77
|
|
78
|
|
79
|
|
80
|
|
81
|
|
82
|
|
83
|
|
84
|
|
85
|
|
86
|
|
87
|
|
88
|
|
89
|
|
90
|
|
91
|
|
92
|
|
93
|
|
94
|
|
95
|
|
96
|
|
97
|
|
98
|
|
99
|
|
100
|
|
101
|
|
102
|
|
103
|
|
104
|
|
105
|
|
106
|
|
107
|
|
108
|
|
109
|
|
110
|
|
111
|
|
112
|
|
113
|
|
114
|
|
115
|
|
116
|
|
117
|
|
118
|
|
119
|
|
120
|
|
121
|
|
122
|
|
123
|
|
124
|
|
125
|
|
126
|
|
127
|
|
128
|
|
129
|
|
130
|
|
131
|
|
132
|
|
133
|
|
134
|
|
135
|
|
136
|
|
137
|
|
138
|
|
139
|
|
140
|
|
141
|
|
142
|
|
143
|
|
144
|
|
145
|
|
146
|
|
147
|
|
148
|
|
149
|
|
150
|
|
151
|
|
152
|
|
153
|
|
154
|
|
155
|
|
156
|
|
157
|
|
158
|
|
159
|
|
160
|
|
161
|
|
162
|
|
163
|
|
164
|
|
165
|
|
166
|
|
167
|
|
168
|
|
169
|
|
170
|
|
171
|
|
172
|
|
173
|
|
174
|
|
175
|
|
176
|
|
177
|
|
178
|
|
179
|
|
180
|
|
181
|
|
182
|
|
183
|
|
184
|
|
185
|
|
186
|
|
187
|
|
188
|
|
189
|
|
190
|
|
191
|
|
192
|
|
193
|
|
194
|
|
195
|
|
196
|
|
197
|
|
198
|
|
199
|
|
200
|
|
201
|
|
202
|
|
203
|
|
204
|
|
205
|
|
206
|
|
207
|
|
208
|
|
209
|
|
210
|
|
211
|
|
212
|
|
213
|
|
214
|
|
215
|
|
216
|
|
217
|
|
218
|
|
219
|
|
220
|
|
221
|
|
222
|
|
223
|
|
224
|
|
225
|
|
226
|
|
227
|
|
228
|
|
229
|
|
230
|
|
231
|
|
232
|
|
233
|
|
234
|
|
235
|
|
236
|
|
237
|
|
238
|
|
239
|
|
240
|
|
241
|
|
242
|
|
243
|
|
244
|
|
245
|
|
246
|
|
247
|
|
248
|
|
249
|
|
250
|
|
251
|
|
252
|
|
253
|
|
254
|
|
255
|
|
256
|
|
257
|
|
258
|
|
259
|
|
260
|
|
261
|
|
262
|
|
263
|
|
264
|
|
265
|
|
266
|
|
267
|
|
268
|
|
269
|
|
270
|
|
271
|
|
272
|
|
273
|
|
274
|
|
275
|
|
276
|
|
277
|
|
278
|
|
279
|
|
280
|
|
281
|
|
282
|
|
283
|
|
284
|
|
285
|
|
286
|
|
287
|
|
288
|
|
289
|
|
290
|
|
291
|
|
292
|
|
293
|
|
294
|
|
295
|
|
296
|
|
297
|
|
298
|
|
299
|
|
300
|
|
301
|
|
302
|
|
303
|
|
304
|
|
305
|
|
306
|
|
307
|
|
308
|
|
309
|
|
310
|
|
311
|
|
312
|
|
313
|
|
314
|
|
315
|
|
316
|
|
317
|
|
318
|
|
319
|
|
320
|
|
321
|
|
322
|
|
323
|
|
324
|
|
325
|
|
326
|
|
327
|
|
328
|
|
329
|
|
330
|
|
331
|
|
332
|
|
333
|
|
334
|
|
335
|
|
336
|
|
337
|
|
338
|
|
339
|
|
340
|
|
341
|
|
342
|
|
343
|
|
344
|
|
345
|
|
346
|
|
347
|
|
348
|
|
349
|
|
350
|
|
351
|
|
352
|
|
353
|
|
354
|
|
355
|
|
356
|
|
357
|
|
358
|
|
359
|
|
360
|
|
361
|
|
362
|
|
363
|
|
364
|
|
365
|
|
366
|
|
367
|
|
368
|
|
369
|
|
370
|
|
371
|
|
372
|
|
373
|
|
374
|
|
375
|
|
376
|
|
377
|
|
378
|
|
379
|
|
380
|
|
381
|
|
382
|
|
383
|
|
384
|
|
385
|
|
386
|
|
387
|
|
388
|
|
389
|
|
390
|
|
391
|
|
392
|
|
393
|
|
394
|
|
395
|
|
396
|
|
397
|
|
398
|
|
399
|
|
400
|
|
401
|
|
402
|
|
403
|
|
404
|
|
405
|
|
406
|
|
407
|
|
408
|
|
409
|
|
410
|
|
411
|
|
412
|
|
413
|
|
414
|
|
415
|
|
416
|
|
417
|
|
418
|
|
419
|
|
420
|
|
421
|
|
422
|
|
423
|
|
424
|
|
425
|
|
426
|
|
427
|
|
428
|
|
429
|
|
430
|
|
431
|
|
432
|
|
433
|
|
434
|
|
435
|
|
436
|
|
437
|
|
438
|
|
439
|
|
440
|
|
441
|
|
442
|
|
443
|
|
444
|
|
445
|
|
446
|
|
447
|
|
448
|
|
449
|
|
450
|
|
451
|
|
452
|
|
453
|
|
454
|
|
455
|
|
456
|
|
457
|
|
458
|
|
459
|
|
460
|
|
461
|
|
462
|
|
463
|
|
464
|
|
465
|
|
466
|
|
467
|
|
468
|
|
469
|
|
470
|
|
471
|
|
472
|
|
473
|
|
474
|
|
475
|
|
476
|
|
477
|
|
478
|
|
479
|
|
480
|
|
481
|
|
482
|
|
483
|
|
484
|
|
485
|
|
486
|
|
487
|
|
488
|
|
489
|
|
490
|
|
491
|
|
492
|
|
493
|
|
494
|
|
495
|
|
496
|
|
497
|
|
498
|
|
499
|
|
500
|
|
501
|
|
502
|
|
503
|
|
504
|
|
505
|
|
506
|
|
507
|
|
508
|
|
509
|
|
510
|
|
511
|
|
512
|
|
513
|
|
514
|
|
515
|
|
516
|
|
517
|
|
518
|
|
519
|
|
520
|
|
521
|
|
522
|
|
523
|
|
524
|
|
525
|
|
526
|
|
527
|
|
528
|
|
529
|
|
530
|
|
531
|
|
532
|
|
533
|
|
534
|
|
535
|
|
536
|
|
537
|
|
538
|
|
539
|
|
540
|
|
541
|
|
542
|
|
543
|
|
544
|
|
545
|
|
546
|
|
547
|
|
548
|
|
549
|
|
550
|
|
551
|
|
552
|
|
553
|
|
554
|
|
555
|
|
556
|
|
557
|
|
558
|
|
559
|
|
560
|
|
561
|
|
562
|
|
563
|
|
564
|
|
565
|
|
566
|
|
567
|
|
568
|
|
569
|
|
570
|
|
571
|
|
572
|
|
573
|
|
574
|
|
575
|
|
576
|
|
577
|
|
578
|
|
579
|
|
580
|
|
581
|
|
582
|
|
583
|
|
584
|
|
585
|
|
586
|
|
587
|
|
588
|
|
589
|
|
590
|
|
591
|
|
592
|
|
593
|
|
594
|
|
595
|
|
596
|
|
597
|
|
598
|
|
599
|
|
600
|
|
601
|
|
602
|
|
603
|
|
604
|
|
605
|
|
606
|
|
607
|
|
608
|
|
609
|
|
610
|
|
611
|
|
612
|
|
613
|
|
614
|
|
615
|
|
616
|
|
617
|
|
618
|
|
619
|
|
620
|
|
621
|
|
622
|
|
623
|
|
624
|
|
625
|
|
626
|
|
627
|
|
628
|
|
629
|
|
630
|
|
631
|
|
632
|
|
633
|
|
634
|
|
635
|
|
636
|
|
637
|
|
638
|
|
639
|
|
640
|
|
641
|
|
642
|
|
643
|
|
644
|
|
645
|
|
646
|
|
647
|
|
648
|
|
649
|
|
650
|
|
651
|
|
652
|
|
653
|
|
654
|
|
655
|
|
656
|
|
657
|
|
658
|
|
659
|
|
660
|
|
661
|
|
662
|
|
663
|
|
664
|
|
665
|
|
666
|
|
667
|
|
668
|
|
669
|
|
670
|
|
671
|
|
672
|
|
673
|
|
674
|
|
675
|
|
676
|
|
677
|
|
678
|
|
679
|
|
680
|
|
681
|
|
682
|
|
683
|
|
684
|
|
685
|
|
686
|
|
687
|
|
688
|
|
689
|
|
690
|
|
691
|
|
692
|
|
693
|
|
694
|
|
695
|
|
696
|
|
697
|
|
698
|
|
699
|
|
700
|
|
701
|
|
702
|
|
703
|
|
704
|
|
705
|
|
706
|
|
707
|
|
708
|
|
709
|
|
710
|
|
711
|
|
712
|
|
713
|
|
714
|
|
715
|
|
716
|
|
717
|
|
718
|
|
719
|
|
720
|
|
721
|
|
722
|
|
723
|
|
724
|
|
725
|
|
726
|
|
727
|
|
728
|
|
729
|
|
730
|
|
731
|
|
732
|
|
733
|
|
734
|
|
735
|
|
736
|
|
737
|
|
738
|
|
739
|
|
740
|
|
741
|
|
742
|
|
743
|
|
744
|
|
745
|
|
746
|
|
747
|
|
748
|
|
749
|
|
750
|
|
751
|
|
752
|
|
753
|
|
754
|
|
755
|
|
756
|
|
757
|
|
758
|
|
759
|
|
760
|
|
761
|
|
762
|
|
763
|
|
764
|
|
765
|
|
766
|
|
767
|
|
768
|
|
769
|
|
770
|
|
771
|
|
772
|
|
773
|
|
774
|
|
775
|
|
776
|
|
777
|
|
778
|
|
779
|
|
780
|
|
781
|
|
782
|
|
783
|
|
784
|
|
785
|
|
786
|
|
787
|
|
788
|
|
789
|
|
790
|
|
791
|
|
792
|
|
793
|
|
794
|
|
795
|
|
796
|
|
797
|
|
798
|
|
799
|
|
800
|
|
801
|
|
802
|
|
803
|
|
804
|
|
805
|
|
806
|
|
807
|
|
808
|
|
809
|
|
810
|
|
811
|
|
812
|
|
813
|
|
814
|
|
815
|
|
816
|
|
817
|
|
818
|
|
819
|
|
820
|
|
821
|
|
822
|
|
823
|
|
824
|
|
825
|
|
826
|
|
827
|
|
828
|
|
829
|
|
830
|
|
831
|
|
832
|
|
833
|
|
834
|
|
835
|
|
836
|
|
837
|
|
838
|
|
839
|
|
840
|
|
841
|
|
842
|
|
843
|
|
844
|
|
845
|
|
846
|
|
847
|
|
848
|
|
849
|
|
850
|
|
851
|
|
852
|
|
853
|
|
854
|
|
855
|
|
856
|
|
857
|
|
858
|
|
859
|
|
860
|
|
861
|
|
862
|
|
863
|
|
864
|
|
865
|
|
866
|
|
867</td><td class="line-coverage"><span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">3</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">3</span>
|
|
<span class="cline-any cline-yes">3</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-yes">3</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">4</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">3</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/*! JSON v3.2.5 | http://bestiejs.github.io/json3 | Copyright 2012-2013, Kit Cambridge | http://kit.mit-license.org */
|
|
;(function (window) {
|
|
// Convenience aliases.
|
|
var getClass = {}.toString, isProperty, forEach, undef;
|
|
|
|
// Detect the `define` function exposed by asynchronous module loaders. The
|
|
// strict `define` check is necessary for compatibility with `r.js`.
|
|
var isLoader = typeof define === "function" && <span class="branch-1 cbranch-no" title="branch not covered" >define.amd;</span>
|
|
|
|
// Detect native implementations.
|
|
var nativeJSON = typeof JSON == "object" && JSON;
|
|
|
|
// Set up the JSON 3 namespace, preferring the CommonJS `exports` object if
|
|
// available.
|
|
var JSON3 = typeof exports == "object" && exports && !exports.nodeType && exports;
|
|
|
|
<span class="missing-if-branch" title="else path not taken"" >E</span>if (JSON3 && nativeJSON) {
|
|
// Explicitly delegate to the native `stringify` and `parse`
|
|
// implementations in CommonJS environments.
|
|
JSON3.stringify = nativeJSON.stringify;
|
|
JSON3.parse = nativeJSON.parse;
|
|
} else {
|
|
// Export for web browsers, JavaScript engines, and asynchronous module
|
|
// loaders, using the global `JSON` object if available.
|
|
<span class="cstat-no" title="statement not covered" > JSON3 = window.JSON = nativeJSON || {};</span>
|
|
}
|
|
|
|
// Test the `Date#getUTC*` methods. Based on work by @Yaffle.
|
|
var isExtended = new Date(-3509827334573292);
|
|
try {
|
|
// The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical
|
|
// results for certain dates in Opera >= 10.53.
|
|
isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&
|
|
// Safari < 2.0.2 stores the internal millisecond time value correctly,
|
|
// but clips the values returned by the date methods to the range of
|
|
// signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).
|
|
isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;
|
|
} catch (exception) {}
|
|
|
|
// Internal: Determines whether the native `JSON.stringify` and `parse`
|
|
// implementations are spec-compliant. Based on work by Ken Snyder.
|
|
function has(name) {
|
|
<span class="missing-if-branch" title="if path not taken"" >I</span>if (has[name] != null) {
|
|
// Return cached feature test result.
|
|
<span class="cstat-no" title="statement not covered" > return has[name];</span>
|
|
}
|
|
|
|
var isSupported;
|
|
<span class="missing-if-branch" title="if path not taken"" >I</span>if (name == "bug-string-char-index") {
|
|
// IE <= 7 doesn't support accessing string characters using square
|
|
// bracket notation. IE 8 only supports this for primitives.
|
|
<span class="cstat-no" title="statement not covered" > isSupported = "a"[0] != "a";</span>
|
|
} else if (name == "json") {
|
|
// Indicates whether both `JSON.stringify` and `JSON.parse` are
|
|
// supported.
|
|
isSupported = has("json-stringify") && has("json-parse");
|
|
} else {
|
|
var value, serialized = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';
|
|
// Test `JSON.stringify`.
|
|
if (name == "json-stringify") {
|
|
var stringify = JSON3.stringify, stringifySupported = typeof stringify == "function" && isExtended;
|
|
<span class="missing-if-branch" title="else path not taken"" >E</span>if (stringifySupported) {
|
|
// A test function object with a custom `toJSON` method.
|
|
(value = function () {
|
|
return 1;
|
|
}).toJSON = value;
|
|
try {
|
|
stringifySupported =
|
|
// Firefox 3.1b1 and b2 serialize string, number, and boolean
|
|
// primitives as object literals.
|
|
stringify(0) === "0" &&
|
|
// FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object
|
|
// literals.
|
|
stringify(new Number()) === "0" &&
|
|
stringify(new String()) == '""' &&
|
|
// FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or
|
|
// does not define a canonical JSON representation (this applies to
|
|
// objects with `toJSON` properties as well, *unless* they are nested
|
|
// within an object or array).
|
|
stringify(getClass) === undef &&
|
|
// IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and
|
|
// FF 3.1b3 pass this test.
|
|
stringify(undef) === undef &&
|
|
// Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,
|
|
// respectively, if the value is omitted entirely.
|
|
stringify() === undef &&
|
|
// FF 3.1b1, 2 throw an error if the given value is not a number,
|
|
// string, array, object, Boolean, or `null` literal. This applies to
|
|
// objects with custom `toJSON` methods as well, unless they are nested
|
|
// inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`
|
|
// methods entirely.
|
|
stringify(value) === "1" &&
|
|
stringify([value]) == "[1]" &&
|
|
// Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of
|
|
// `"[null]"`.
|
|
stringify([undef]) == "[null]" &&
|
|
// YUI 3.0.0b1 fails to serialize `null` literals.
|
|
stringify(null) == "null" &&
|
|
// FF 3.1b1, 2 halts serialization if an array contains a function:
|
|
// `[1, true, getClass, 1]` serializes as "[1,true,],". FF 3.1b3
|
|
// elides non-JSON values from objects and arrays, unless they
|
|
// define custom `toJSON` methods.
|
|
stringify([undef, getClass, null]) == "[null,null,null]" &&
|
|
// Simple serialization test. FF 3.1b1 uses Unicode escape sequences
|
|
// where character escape codes are expected (e.g., `\b` => `\u0008`).
|
|
stringify({ "a": [value, true, false, null, "\x00\b\n\f\r\t"] }) == serialized &&
|
|
// FF 3.1b1 and b2 ignore the `filter` and `width` arguments.
|
|
stringify(null, value) === "1" &&
|
|
stringify([1, 2], null, 1) == "[\n 1,\n 2\n]" &&
|
|
// JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly
|
|
// serialize extended years.
|
|
stringify(new Date(-8.64e15)) == '"-271821-04-20T00:00:00.000Z"' &&
|
|
// The milliseconds are optional in ES 5, but required in 5.1.
|
|
stringify(new Date(8.64e15)) == '"+275760-09-13T00:00:00.000Z"' &&
|
|
// Firefox <= 11.0 incorrectly serializes years prior to 0 as negative
|
|
// four-digit years instead of six-digit years. Credits: @Yaffle.
|
|
stringify(new Date(-621987552e5)) == '"-000001-01-01T00:00:00.000Z"' &&
|
|
// Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond
|
|
// values less than 1000. Credits: @Yaffle.
|
|
stringify(new Date(-1)) == '"1969-12-31T23:59:59.999Z"';
|
|
} catch (exception) {
|
|
<span class="cstat-no" title="statement not covered" > stringifySupported = false;</span>
|
|
}
|
|
}
|
|
isSupported = stringifySupported;
|
|
}
|
|
// Test `JSON.parse`.
|
|
if (name == "json-parse") {
|
|
var parse = JSON3.parse;
|
|
<span class="missing-if-branch" title="else path not taken"" >E</span>if (typeof parse == "function") {
|
|
try {
|
|
// FF 3.1b1, b2 will throw an exception if a bare literal is provided.
|
|
// Conforming implementations should also coerce the initial argument to
|
|
// a string prior to parsing.
|
|
<span class="missing-if-branch" title="else path not taken"" >E</span>if (parse("0") === 0 && !parse(false)) {
|
|
// Simple parsing test.
|
|
value = parse(serialized);
|
|
var parseSupported = value["a"].length == 5 && value["a"][0] === 1;
|
|
<span class="missing-if-branch" title="else path not taken"" >E</span>if (parseSupported) {
|
|
try {
|
|
// Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.
|
|
parseSupported = !parse('"\t"');
|
|
} catch (exception) {}
|
|
<span class="missing-if-branch" title="else path not taken"" >E</span>if (parseSupported) {
|
|
try {
|
|
// FF 4.0 and 4.0.1 allow leading `+` signs and leading
|
|
// decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow
|
|
// certain octal literals.
|
|
parseSupported = parse("01") !== 1;
|
|
} catch (exception) {}
|
|
}
|
|
<span class="missing-if-branch" title="else path not taken"" >E</span>if (parseSupported) {
|
|
try {
|
|
// FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal
|
|
// points. These environments, along with FF 3.1b1 and 2,
|
|
// also allow trailing commas in JSON objects and arrays.
|
|
parseSupported = parse("1.") !== 1;
|
|
} catch (exception) {}
|
|
}
|
|
}
|
|
}
|
|
} catch (exception) {
|
|
<span class="cstat-no" title="statement not covered" > parseSupported = false;</span>
|
|
}
|
|
}
|
|
isSupported = parseSupported;
|
|
}
|
|
}
|
|
return has[name] = !!isSupported;
|
|
}
|
|
has["bug-string-char-index"] = null;
|
|
has["json"] = null;
|
|
has["json-stringify"] = null;
|
|
has["json-parse"] = null;
|
|
|
|
<span class="missing-if-branch" title="if path not taken"" >I</span>if (!has("json")) {
|
|
// Common `[[Class]]` name aliases.
|
|
<span class="cstat-no" title="statement not covered" > var functionClass = "[object Function]";</span>
|
|
<span class="cstat-no" title="statement not covered" > var dateClass = "[object Date]";</span>
|
|
<span class="cstat-no" title="statement not covered" > var numberClass = "[object Number]";</span>
|
|
<span class="cstat-no" title="statement not covered" > var stringClass = "[object String]";</span>
|
|
<span class="cstat-no" title="statement not covered" > var arrayClass = "[object Array]";</span>
|
|
<span class="cstat-no" title="statement not covered" > var booleanClass = "[object Boolean]";</span>
|
|
|
|
// Detect incomplete support for accessing string characters by index.
|
|
<span class="cstat-no" title="statement not covered" > var charIndexBuggy = has("bug-string-char-index");</span>
|
|
|
|
// Define additional utility methods if the `Date` methods are buggy.
|
|
<span class="cstat-no" title="statement not covered" > if (!isExtended) {</span>
|
|
<span class="cstat-no" title="statement not covered" > var floor = Math.floor;</span>
|
|
// A mapping between the months of the year and the number of days between
|
|
// January 1st and the first of the respective month.
|
|
<span class="cstat-no" title="statement not covered" > var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];</span>
|
|
// Internal: Calculates the number of days between the Unix epoch and the
|
|
// first day of the given month.
|
|
<span class="cstat-no" title="statement not covered" > var getDay = <span class="fstat-no" title="function not covered" >function (year, month) {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);</span>
|
|
};
|
|
}
|
|
|
|
// Internal: Determines if a property is a direct property of the given
|
|
// object. Delegates to the native `Object#hasOwnProperty` method.
|
|
<span class="cstat-no" title="statement not covered" > if (!(isProperty = {}.hasOwnProperty)) {</span>
|
|
<span class="cstat-no" title="statement not covered" > isProperty = <span class="fstat-no" title="function not covered" >function (property) {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > var members = {}, constructor;</span>
|
|
<span class="cstat-no" title="statement not covered" > if ((members.__proto__ = null, members.__proto__ = {</span>
|
|
// The *proto* property cannot be set multiple times in recent
|
|
// versions of Firefox and SeaMonkey.
|
|
"toString": 1
|
|
}, members).toString != getClass) {
|
|
// Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but
|
|
// supports the mutable *proto* property.
|
|
<span class="cstat-no" title="statement not covered" > isProperty = <span class="fstat-no" title="function not covered" >function (property) {</span></span>
|
|
// Capture and break the object's prototype chain (see section 8.6.2
|
|
// of the ES 5.1 spec). The parenthesized expression prevents an
|
|
// unsafe transformation by the Closure Compiler.
|
|
<span class="cstat-no" title="statement not covered" > var original = this.__proto__, result = property in (this.__proto__ = null, this);</span>
|
|
// Restore the original prototype chain.
|
|
<span class="cstat-no" title="statement not covered" > this.__proto__ = original;</span>
|
|
<span class="cstat-no" title="statement not covered" > return result;</span>
|
|
};
|
|
} else {
|
|
// Capture a reference to the top-level `Object` constructor.
|
|
<span class="cstat-no" title="statement not covered" > constructor = members.constructor;</span>
|
|
// Use the `constructor` property to simulate `Object#hasOwnProperty` in
|
|
// other environments.
|
|
<span class="cstat-no" title="statement not covered" > isProperty = <span class="fstat-no" title="function not covered" >function (property) {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > var parent = (this.constructor || constructor).prototype;</span>
|
|
<span class="cstat-no" title="statement not covered" > return property in this && !(property in parent && this[property] === parent[property]);</span>
|
|
};
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > members = null;</span>
|
|
<span class="cstat-no" title="statement not covered" > return isProperty.call(this, property);</span>
|
|
};
|
|
}
|
|
|
|
// Internal: A set of primitive types used by `isHostType`.
|
|
<span class="cstat-no" title="statement not covered" > var PrimitiveTypes = {</span>
|
|
'boolean': 1,
|
|
'number': 1,
|
|
'string': 1,
|
|
'undefined': 1
|
|
};
|
|
|
|
// Internal: Determines if the given object `property` value is a
|
|
// non-primitive.
|
|
<span class="cstat-no" title="statement not covered" > var isHostType = <span class="fstat-no" title="function not covered" >function (object, property) {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > var type = typeof object[property];</span>
|
|
<span class="cstat-no" title="statement not covered" > return type == 'object' ? !!object[property] : !PrimitiveTypes[type];</span>
|
|
};
|
|
|
|
// Internal: Normalizes the `for...in` iteration algorithm across
|
|
// environments. Each enumerated key is yielded to a `callback` function.
|
|
<span class="cstat-no" title="statement not covered" > forEach = <span class="fstat-no" title="function not covered" >function (object, callback) {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > var size = 0, Properties, members, property;</span>
|
|
|
|
// Tests for bugs in the current environment's `for...in` algorithm. The
|
|
// `valueOf` property inherits the non-enumerable flag from
|
|
// `Object.prototype` in older versions of IE, Netscape, and Mozilla.
|
|
<span class="cstat-no" title="statement not covered" > (Properties = <span class="fstat-no" title="function not covered" >function () {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > this.valueOf = 0;</span>
|
|
}).prototype.valueOf = 0;
|
|
|
|
// Iterate over a new instance of the `Properties` class.
|
|
<span class="cstat-no" title="statement not covered" > members = new Properties();</span>
|
|
<span class="cstat-no" title="statement not covered" > for (property in members) {</span>
|
|
// Ignore all properties inherited from `Object.prototype`.
|
|
<span class="cstat-no" title="statement not covered" > if (isProperty.call(members, property)) {</span>
|
|
<span class="cstat-no" title="statement not covered" > size++;</span>
|
|
}
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > Properties = members = null;</span>
|
|
|
|
// Normalize the iteration algorithm.
|
|
<span class="cstat-no" title="statement not covered" > if (!size) {</span>
|
|
// A list of non-enumerable properties inherited from `Object.prototype`.
|
|
<span class="cstat-no" title="statement not covered" > members = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"];</span>
|
|
// IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable
|
|
// properties.
|
|
<span class="cstat-no" title="statement not covered" > forEach = <span class="fstat-no" title="function not covered" >function (object, callback) {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > var isFunction = getClass.call(object) == functionClass, property, length;</span>
|
|
<span class="cstat-no" title="statement not covered" > var hasProperty = !isFunction && typeof object.constructor != 'function' && isHostType(object, 'hasOwnProperty') ? object.hasOwnProperty : isProperty;</span>
|
|
<span class="cstat-no" title="statement not covered" > for (property in object) {</span>
|
|
// Gecko <= 1.0 enumerates the `prototype` property of functions under
|
|
// certain conditions; IE does not.
|
|
<span class="cstat-no" title="statement not covered" > if (!(isFunction && property == "prototype") && hasProperty.call(object, property)) {</span>
|
|
<span class="cstat-no" title="statement not covered" > callback(property);</span>
|
|
}
|
|
}
|
|
// Manually invoke the callback for each non-enumerable property.
|
|
<span class="cstat-no" title="statement not covered" > for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));</span>
|
|
};
|
|
} else <span class="cstat-no" title="statement not covered" >if (size == 2) {</span>
|
|
// Safari <= 2.0.4 enumerates shadowed properties twice.
|
|
<span class="cstat-no" title="statement not covered" > forEach = <span class="fstat-no" title="function not covered" >function (object, callback) {</span></span>
|
|
// Create a set of iterated properties.
|
|
<span class="cstat-no" title="statement not covered" > var members = {}, isFunction = getClass.call(object) == functionClass, property;</span>
|
|
<span class="cstat-no" title="statement not covered" > for (property in object) {</span>
|
|
// Store each property name to prevent double enumeration. The
|
|
// `prototype` property of functions is not enumerated due to cross-
|
|
// environment inconsistencies.
|
|
<span class="cstat-no" title="statement not covered" > if (!(isFunction && property == "prototype") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {</span>
|
|
<span class="cstat-no" title="statement not covered" > callback(property);</span>
|
|
}
|
|
}
|
|
};
|
|
} else {
|
|
// No bugs detected; use the standard `for...in` algorithm.
|
|
<span class="cstat-no" title="statement not covered" > forEach = <span class="fstat-no" title="function not covered" >function (object, callback) {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > var isFunction = getClass.call(object) == functionClass, property, isConstructor;</span>
|
|
<span class="cstat-no" title="statement not covered" > for (property in object) {</span>
|
|
<span class="cstat-no" title="statement not covered" > if (!(isFunction && property == "prototype") && isProperty.call(object, property) && !(isConstructor = property === "constructor")) {</span>
|
|
<span class="cstat-no" title="statement not covered" > callback(property);</span>
|
|
}
|
|
}
|
|
// Manually invoke the callback for the `constructor` property due to
|
|
// cross-environment inconsistencies.
|
|
<span class="cstat-no" title="statement not covered" > if (isConstructor || isProperty.call(object, (property = "constructor"))) {</span>
|
|
<span class="cstat-no" title="statement not covered" > callback(property);</span>
|
|
}
|
|
};
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > return forEach(object, callback);</span>
|
|
};
|
|
|
|
// Public: Serializes a JavaScript `value` as a JSON string. The optional
|
|
// `filter` argument may specify either a function that alters how object and
|
|
// array members are serialized, or an array of strings and numbers that
|
|
// indicates which properties should be serialized. The optional `width`
|
|
// argument may be either a string or number that specifies the indentation
|
|
// level of the output.
|
|
<span class="cstat-no" title="statement not covered" > if (!has("json-stringify")) {</span>
|
|
// Internal: A map of control characters and their escaped equivalents.
|
|
<span class="cstat-no" title="statement not covered" > var Escapes = {</span>
|
|
92: "\\\\",
|
|
34: '\\"',
|
|
8: "\\b",
|
|
12: "\\f",
|
|
10: "\\n",
|
|
13: "\\r",
|
|
9: "\\t"
|
|
};
|
|
|
|
// Internal: Converts `value` into a zero-padded string such that its
|
|
// length is at least equal to `width`. The `width` must be <= 6.
|
|
<span class="cstat-no" title="statement not covered" > var leadingZeroes = "000000";</span>
|
|
<span class="cstat-no" title="statement not covered" > var toPaddedString = <span class="fstat-no" title="function not covered" >function (width, value) {</span></span>
|
|
// The `|| 0` expression is necessary to work around a bug in
|
|
// Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== "0"`.
|
|
<span class="cstat-no" title="statement not covered" > return (leadingZeroes + (value || 0)).slice(-width);</span>
|
|
};
|
|
|
|
// Internal: Double-quotes a string `value`, replacing all ASCII control
|
|
// characters (characters with code unit values between 0 and 31) with
|
|
// their escaped equivalents. This is an implementation of the
|
|
// `Quote(value)` operation defined in ES 5.1 section 15.12.3.
|
|
<span class="cstat-no" title="statement not covered" > var unicodePrefix = "\\u00";</span>
|
|
<span class="cstat-no" title="statement not covered" > var quote = <span class="fstat-no" title="function not covered" >function (value) {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > var result = '"', index = 0, length = value.length, isLarge = length > 10 && charIndexBuggy, symbols;</span>
|
|
<span class="cstat-no" title="statement not covered" > if (isLarge) {</span>
|
|
<span class="cstat-no" title="statement not covered" > symbols = value.split("");</span>
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > for (; index < length; index++) {</span>
|
|
<span class="cstat-no" title="statement not covered" > var charCode = value.charCodeAt(index);</span>
|
|
// If the character is a control character, append its Unicode or
|
|
// shorthand escape sequence; otherwise, append the character as-is.
|
|
<span class="cstat-no" title="statement not covered" > switch (charCode) {</span>
|
|
case 8: case 9: case 10: case 12: case 13: case 34: case 92:
|
|
<span class="cstat-no" title="statement not covered" > result += Escapes[charCode];</span>
|
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
default:
|
|
<span class="cstat-no" title="statement not covered" > if (charCode < 32) {</span>
|
|
<span class="cstat-no" title="statement not covered" > result += unicodePrefix + toPaddedString(2, charCode.toString(16));</span>
|
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > result += isLarge ? symbols[index] : charIndexBuggy ? value.charAt(index) : value[index];</span>
|
|
}
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > return result + '"';</span>
|
|
};
|
|
|
|
// Internal: Recursively serializes an object. Implements the
|
|
// `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.
|
|
<span class="cstat-no" title="statement not covered" > var serialize = <span class="fstat-no" title="function not covered" >function (property, object, callback, properties, whitespace, indentation, stack) {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, hasMembers, result;</span>
|
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
// Necessary for host object support.
|
|
<span class="cstat-no" title="statement not covered" > value = object[property];</span>
|
|
} catch (exception) {}
|
|
<span class="cstat-no" title="statement not covered" > if (typeof value == "object" && value) {</span>
|
|
<span class="cstat-no" title="statement not covered" > className = getClass.call(value);</span>
|
|
<span class="cstat-no" title="statement not covered" > if (className == dateClass && !isProperty.call(value, "toJSON")) {</span>
|
|
<span class="cstat-no" title="statement not covered" > if (value > -1 / 0 && value < 1 / 0) {</span>
|
|
// Dates are serialized according to the `Date#toJSON` method
|
|
// specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15
|
|
// for the ISO 8601 date time string format.
|
|
<span class="cstat-no" title="statement not covered" > if (getDay) {</span>
|
|
// Manually compute the year, month, date, hours, minutes,
|
|
// seconds, and milliseconds if the `getUTC*` methods are
|
|
// buggy. Adapted from @Yaffle's `date-shim` project.
|
|
<span class="cstat-no" title="statement not covered" > date = floor(value / 864e5);</span>
|
|
<span class="cstat-no" title="statement not covered" > for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);</span>
|
|
<span class="cstat-no" title="statement not covered" > for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);</span>
|
|
<span class="cstat-no" title="statement not covered" > date = 1 + date - getDay(year, month);</span>
|
|
// The `time` value specifies the time within the day (see ES
|
|
// 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used
|
|
// to compute `A modulo B`, as the `%` operator does not
|
|
// correspond to the `modulo` operation for negative numbers.
|
|
<span class="cstat-no" title="statement not covered" > time = (value % 864e5 + 864e5) % 864e5;</span>
|
|
// The hours, minutes, seconds, and milliseconds are obtained by
|
|
// decomposing the time within the day. See section 15.9.1.10.
|
|
<span class="cstat-no" title="statement not covered" > hours = floor(time / 36e5) % 24;</span>
|
|
<span class="cstat-no" title="statement not covered" > minutes = floor(time / 6e4) % 60;</span>
|
|
<span class="cstat-no" title="statement not covered" > seconds = floor(time / 1e3) % 60;</span>
|
|
<span class="cstat-no" title="statement not covered" > milliseconds = time % 1e3;</span>
|
|
} else {
|
|
<span class="cstat-no" title="statement not covered" > year = value.getUTCFullYear();</span>
|
|
<span class="cstat-no" title="statement not covered" > month = value.getUTCMonth();</span>
|
|
<span class="cstat-no" title="statement not covered" > date = value.getUTCDate();</span>
|
|
<span class="cstat-no" title="statement not covered" > hours = value.getUTCHours();</span>
|
|
<span class="cstat-no" title="statement not covered" > minutes = value.getUTCMinutes();</span>
|
|
<span class="cstat-no" title="statement not covered" > seconds = value.getUTCSeconds();</span>
|
|
<span class="cstat-no" title="statement not covered" > milliseconds = value.getUTCMilliseconds();</span>
|
|
}
|
|
// Serialize extended years correctly.
|
|
<span class="cstat-no" title="statement not covered" > value = (year <= 0 || year >= 1e4 ? (year < 0 ? "-" : "+") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +</span>
|
|
"-" + toPaddedString(2, month + 1) + "-" + toPaddedString(2, date) +
|
|
// Months, dates, hours, minutes, and seconds should have two
|
|
// digits; milliseconds should have three.
|
|
"T" + toPaddedString(2, hours) + ":" + toPaddedString(2, minutes) + ":" + toPaddedString(2, seconds) +
|
|
// Milliseconds are optional in ES 5.0, but required in 5.1.
|
|
"." + toPaddedString(3, milliseconds) + "Z";
|
|
} else {
|
|
<span class="cstat-no" title="statement not covered" > value = null;</span>
|
|
}
|
|
} else <span class="cstat-no" title="statement not covered" >if (typeof value.toJSON == "function" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, "toJSON"))) {</span>
|
|
// Prototype <= 1.6.1 adds non-standard `toJSON` methods to the
|
|
// `Number`, `String`, `Date`, and `Array` prototypes. JSON 3
|
|
// ignores all `toJSON` methods on these objects unless they are
|
|
// defined directly on an instance.
|
|
<span class="cstat-no" title="statement not covered" > value = value.toJSON(property);</span>
|
|
}
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > if (callback) {</span>
|
|
// If a replacement function was provided, call it to obtain the value
|
|
// for serialization.
|
|
<span class="cstat-no" title="statement not covered" > value = callback.call(object, property, value);</span>
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > if (value === null) {</span>
|
|
<span class="cstat-no" title="statement not covered" > return "null";</span>
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > className = getClass.call(value);</span>
|
|
<span class="cstat-no" title="statement not covered" > if (className == booleanClass) {</span>
|
|
// Booleans are represented literally.
|
|
<span class="cstat-no" title="statement not covered" > return "" + value;</span>
|
|
} else <span class="cstat-no" title="statement not covered" >if (className == numberClass) {</span>
|
|
// JSON numbers must be finite. `Infinity` and `NaN` are serialized as
|
|
// `"null"`.
|
|
<span class="cstat-no" title="statement not covered" > return value > -1 / 0 && value < 1 / 0 ? "" + value : "null";</span>
|
|
} else <span class="cstat-no" title="statement not covered" >if (className == stringClass) {</span>
|
|
// Strings are double-quoted and escaped.
|
|
<span class="cstat-no" title="statement not covered" > return quote("" + value);</span>
|
|
}
|
|
// Recursively serialize objects and arrays.
|
|
<span class="cstat-no" title="statement not covered" > if (typeof value == "object") {</span>
|
|
// Check for cyclic structures. This is a linear search; performance
|
|
// is inversely proportional to the number of unique nested objects.
|
|
<span class="cstat-no" title="statement not covered" > for (length = stack.length; length--;) {</span>
|
|
<span class="cstat-no" title="statement not covered" > if (stack[length] === value) {</span>
|
|
// Cyclic structures cannot be serialized by `JSON.stringify`.
|
|
<span class="cstat-no" title="statement not covered" > throw TypeError();</span>
|
|
}
|
|
}
|
|
// Add the object to the stack of traversed objects.
|
|
<span class="cstat-no" title="statement not covered" > stack.push(value);</span>
|
|
<span class="cstat-no" title="statement not covered" > results = [];</span>
|
|
// Save the current indentation level and indent one additional level.
|
|
<span class="cstat-no" title="statement not covered" > prefix = indentation;</span>
|
|
<span class="cstat-no" title="statement not covered" > indentation += whitespace;</span>
|
|
<span class="cstat-no" title="statement not covered" > if (className == arrayClass) {</span>
|
|
// Recursively serialize array elements.
|
|
<span class="cstat-no" title="statement not covered" > for (index = 0, length = value.length; index < length; hasMembers || (hasMembers = true), index++) {</span>
|
|
<span class="cstat-no" title="statement not covered" > element = serialize(index, value, callback, properties, whitespace, indentation, stack);</span>
|
|
<span class="cstat-no" title="statement not covered" > results.push(element === undef ? "null" : element);</span>
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > result = hasMembers ? (whitespace ? "[\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "]" : ("[" + results.join(",") + "]")) : "[]";</span>
|
|
} else {
|
|
// Recursively serialize object members. Members are selected from
|
|
// either a user-specified list of property names, or the object
|
|
// itself.
|
|
<span class="cstat-no" title="statement not covered" > forEach(properties || value, <span class="fstat-no" title="function not covered" >function (property) {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > var element = serialize(property, value, callback, properties, whitespace, indentation, stack);</span>
|
|
<span class="cstat-no" title="statement not covered" > if (element !== undef) {</span>
|
|
// According to ES 5.1 section 15.12.3: "If `gap` {whitespace}
|
|
// is not the empty string, let `member` {quote(property) + ":"}
|
|
// be the concatenation of `member` and the `space` character."
|
|
// The "`space` character" refers to the literal space
|
|
// character, not the `space` {width} argument provided to
|
|
// `JSON.stringify`.
|
|
<span class="cstat-no" title="statement not covered" > results.push(quote(property) + ":" + (whitespace ? " " : "") + element);</span>
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > hasMembers || (hasMembers = true);</span>
|
|
});
|
|
<span class="cstat-no" title="statement not covered" > result = hasMembers ? (whitespace ? "{\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "}" : ("{" + results.join(",") + "}")) : "{}";</span>
|
|
}
|
|
// Remove the object from the traversed object stack.
|
|
<span class="cstat-no" title="statement not covered" > stack.pop();</span>
|
|
<span class="cstat-no" title="statement not covered" > return result;</span>
|
|
}
|
|
};
|
|
|
|
// Public: `JSON.stringify`. See ES 5.1 section 15.12.3.
|
|
<span class="cstat-no" title="statement not covered" > JSON3.stringify = <span class="fstat-no" title="function not covered" >function (source, filter, width) {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > var whitespace, callback, properties, className;</span>
|
|
<span class="cstat-no" title="statement not covered" > if (typeof filter == "function" || typeof filter == "object" && filter) {</span>
|
|
<span class="cstat-no" title="statement not covered" > if ((className = getClass.call(filter)) == functionClass) {</span>
|
|
<span class="cstat-no" title="statement not covered" > callback = filter;</span>
|
|
} else <span class="cstat-no" title="statement not covered" >if (className == arrayClass) {</span>
|
|
// Convert the property names array into a makeshift set.
|
|
<span class="cstat-no" title="statement not covered" > properties = {};</span>
|
|
<span class="cstat-no" title="statement not covered" > for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((getClass.call(value) == stringClass || getClass.call(value) == numberClass) && (properties[value] = 1)));</span>
|
|
}
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > if (width) {</span>
|
|
<span class="cstat-no" title="statement not covered" > if ((className = getClass.call(width)) == numberClass) {</span>
|
|
// Convert the `width` to an integer and create a string containing
|
|
// `width` number of space characters.
|
|
<span class="cstat-no" title="statement not covered" > if ((width -= width % 1) > 0) {</span>
|
|
<span class="cstat-no" title="statement not covered" > for (whitespace = "", width > 10 && (width = 10); whitespace.length < width; whitespace += " ");</span>
|
|
}
|
|
} else <span class="cstat-no" title="statement not covered" >if (className == stringClass) {</span>
|
|
<span class="cstat-no" title="statement not covered" > whitespace = width.length <= 10 ? width : width.slice(0, 10);</span>
|
|
}
|
|
}
|
|
// Opera <= 7.54u2 discards the values associated with empty string keys
|
|
// (`""`) only if they are used directly within an object member list
|
|
// (e.g., `!("" in { "": 1})`).
|
|
<span class="cstat-no" title="statement not covered" > return serialize("", (value = {}, value[""] = source, value), callback, properties, whitespace, "", []);</span>
|
|
};
|
|
}
|
|
|
|
// Public: Parses a JSON source string.
|
|
<span class="cstat-no" title="statement not covered" > if (!has("json-parse")) {</span>
|
|
<span class="cstat-no" title="statement not covered" > var fromCharCode = String.fromCharCode;</span>
|
|
|
|
// Internal: A map of escaped control characters and their unescaped
|
|
// equivalents.
|
|
<span class="cstat-no" title="statement not covered" > var Unescapes = {</span>
|
|
92: "\\",
|
|
34: '"',
|
|
47: "/",
|
|
98: "\b",
|
|
116: "\t",
|
|
110: "\n",
|
|
102: "\f",
|
|
114: "\r"
|
|
};
|
|
|
|
// Internal: Stores the parser state.
|
|
<span class="cstat-no" title="statement not covered" > var Index, Source;</span>
|
|
|
|
// Internal: Resets the parser state and throws a `SyntaxError`.
|
|
<span class="cstat-no" title="statement not covered" > var abort = <span class="fstat-no" title="function not covered" >function() {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > Index = Source = null;</span>
|
|
<span class="cstat-no" title="statement not covered" > throw SyntaxError();</span>
|
|
};
|
|
|
|
// Internal: Returns the next token, or `"$"` if the parser has reached
|
|
// the end of the source string. A token may be a string, number, `null`
|
|
// literal, or Boolean literal.
|
|
<span class="cstat-no" title="statement not covered" > var lex = <span class="fstat-no" title="function not covered" >function () {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > var source = Source, length = source.length, value, begin, position, isSigned, charCode;</span>
|
|
<span class="cstat-no" title="statement not covered" > while (Index < length) {</span>
|
|
<span class="cstat-no" title="statement not covered" > charCode = source.charCodeAt(Index);</span>
|
|
<span class="cstat-no" title="statement not covered" > switch (charCode) {</span>
|
|
case 9: case 10: case 13: case 32:
|
|
// Skip whitespace tokens, including tabs, carriage returns, line
|
|
// feeds, and space characters.
|
|
<span class="cstat-no" title="statement not covered" > Index++;</span>
|
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
case 123: case 125: case 91: case 93: case 58: case 44:
|
|
// Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at
|
|
// the current position.
|
|
<span class="cstat-no" title="statement not covered" > value = charIndexBuggy ? source.charAt(Index) : source[Index];</span>
|
|
<span class="cstat-no" title="statement not covered" > Index++;</span>
|
|
<span class="cstat-no" title="statement not covered" > return value;</span>
|
|
case 34:
|
|
// `"` delimits a JSON string; advance to the next character and
|
|
// begin parsing the string. String tokens are prefixed with the
|
|
// sentinel `@` character to distinguish them from punctuators and
|
|
// end-of-string tokens.
|
|
<span class="cstat-no" title="statement not covered" > for (value = "@", Index++; Index < length;) {</span>
|
|
<span class="cstat-no" title="statement not covered" > charCode = source.charCodeAt(Index);</span>
|
|
<span class="cstat-no" title="statement not covered" > if (charCode < 32) {</span>
|
|
// Unescaped ASCII control characters (those with a code unit
|
|
// less than the space character) are not permitted.
|
|
<span class="cstat-no" title="statement not covered" > abort();</span>
|
|
} else <span class="cstat-no" title="statement not covered" >if (charCode == 92) {</span>
|
|
// A reverse solidus (`\`) marks the beginning of an escaped
|
|
// control character (including `"`, `\`, and `/`) or Unicode
|
|
// escape sequence.
|
|
<span class="cstat-no" title="statement not covered" > charCode = source.charCodeAt(++Index);</span>
|
|
<span class="cstat-no" title="statement not covered" > switch (charCode) {</span>
|
|
case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:
|
|
// Revive escaped control characters.
|
|
<span class="cstat-no" title="statement not covered" > value += Unescapes[charCode];</span>
|
|
<span class="cstat-no" title="statement not covered" > Index++;</span>
|
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
case 117:
|
|
// `\u` marks the beginning of a Unicode escape sequence.
|
|
// Advance to the first character and validate the
|
|
// four-digit code point.
|
|
<span class="cstat-no" title="statement not covered" > begin = ++Index;</span>
|
|
<span class="cstat-no" title="statement not covered" > for (position = Index + 4; Index < position; Index++) {</span>
|
|
<span class="cstat-no" title="statement not covered" > charCode = source.charCodeAt(Index);</span>
|
|
// A valid sequence comprises four hexdigits (case-
|
|
// insensitive) that form a single hexadecimal value.
|
|
<span class="cstat-no" title="statement not covered" > if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {</span>
|
|
// Invalid Unicode escape sequence.
|
|
<span class="cstat-no" title="statement not covered" > abort();</span>
|
|
}
|
|
}
|
|
// Revive the escaped character.
|
|
<span class="cstat-no" title="statement not covered" > value += fromCharCode("0x" + source.slice(begin, Index));</span>
|
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
default:
|
|
// Invalid escape sequence.
|
|
<span class="cstat-no" title="statement not covered" > abort();</span>
|
|
}
|
|
} else {
|
|
<span class="cstat-no" title="statement not covered" > if (charCode == 34) {</span>
|
|
// An unescaped double-quote character marks the end of the
|
|
// string.
|
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > charCode = source.charCodeAt(Index);</span>
|
|
<span class="cstat-no" title="statement not covered" > begin = Index;</span>
|
|
// Optimize for the common case where a string is valid.
|
|
<span class="cstat-no" title="statement not covered" > while (charCode >= 32 && charCode != 92 && charCode != 34) {</span>
|
|
<span class="cstat-no" title="statement not covered" > charCode = source.charCodeAt(++Index);</span>
|
|
}
|
|
// Append the string as-is.
|
|
<span class="cstat-no" title="statement not covered" > value += source.slice(begin, Index);</span>
|
|
}
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > if (source.charCodeAt(Index) == 34) {</span>
|
|
// Advance to the next character and return the revived string.
|
|
<span class="cstat-no" title="statement not covered" > Index++;</span>
|
|
<span class="cstat-no" title="statement not covered" > return value;</span>
|
|
}
|
|
// Unterminated string.
|
|
<span class="cstat-no" title="statement not covered" > abort();</span>
|
|
default:
|
|
// Parse numbers and literals.
|
|
<span class="cstat-no" title="statement not covered" > begin = Index;</span>
|
|
// Advance past the negative sign, if one is specified.
|
|
<span class="cstat-no" title="statement not covered" > if (charCode == 45) {</span>
|
|
<span class="cstat-no" title="statement not covered" > isSigned = true;</span>
|
|
<span class="cstat-no" title="statement not covered" > charCode = source.charCodeAt(++Index);</span>
|
|
}
|
|
// Parse an integer or floating-point value.
|
|
<span class="cstat-no" title="statement not covered" > if (charCode >= 48 && charCode <= 57) {</span>
|
|
// Leading zeroes are interpreted as octal literals.
|
|
<span class="cstat-no" title="statement not covered" > if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {</span>
|
|
// Illegal octal literal.
|
|
<span class="cstat-no" title="statement not covered" > abort();</span>
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > isSigned = false;</span>
|
|
// Parse the integer component.
|
|
<span class="cstat-no" title="statement not covered" > for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);</span>
|
|
// Floats cannot contain a leading decimal point; however, this
|
|
// case is already accounted for by the parser.
|
|
<span class="cstat-no" title="statement not covered" > if (source.charCodeAt(Index) == 46) {</span>
|
|
<span class="cstat-no" title="statement not covered" > position = ++Index;</span>
|
|
// Parse the decimal component.
|
|
<span class="cstat-no" title="statement not covered" > for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);</span>
|
|
<span class="cstat-no" title="statement not covered" > if (position == Index) {</span>
|
|
// Illegal trailing decimal.
|
|
<span class="cstat-no" title="statement not covered" > abort();</span>
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > Index = position;</span>
|
|
}
|
|
// Parse exponents. The `e` denoting the exponent is
|
|
// case-insensitive.
|
|
<span class="cstat-no" title="statement not covered" > charCode = source.charCodeAt(Index);</span>
|
|
<span class="cstat-no" title="statement not covered" > if (charCode == 101 || charCode == 69) {</span>
|
|
<span class="cstat-no" title="statement not covered" > charCode = source.charCodeAt(++Index);</span>
|
|
// Skip past the sign following the exponent, if one is
|
|
// specified.
|
|
<span class="cstat-no" title="statement not covered" > if (charCode == 43 || charCode == 45) {</span>
|
|
<span class="cstat-no" title="statement not covered" > Index++;</span>
|
|
}
|
|
// Parse the exponential component.
|
|
<span class="cstat-no" title="statement not covered" > for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);</span>
|
|
<span class="cstat-no" title="statement not covered" > if (position == Index) {</span>
|
|
// Illegal empty exponent.
|
|
<span class="cstat-no" title="statement not covered" > abort();</span>
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > Index = position;</span>
|
|
}
|
|
// Coerce the parsed value to a JavaScript number.
|
|
<span class="cstat-no" title="statement not covered" > return +source.slice(begin, Index);</span>
|
|
}
|
|
// A negative sign may only precede numbers.
|
|
<span class="cstat-no" title="statement not covered" > if (isSigned) {</span>
|
|
<span class="cstat-no" title="statement not covered" > abort();</span>
|
|
}
|
|
// `true`, `false`, and `null` literals.
|
|
<span class="cstat-no" title="statement not covered" > if (source.slice(Index, Index + 4) == "true") {</span>
|
|
<span class="cstat-no" title="statement not covered" > Index += 4;</span>
|
|
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
} else <span class="cstat-no" title="statement not covered" >if (source.slice(Index, Index + 5) == "false") {</span>
|
|
<span class="cstat-no" title="statement not covered" > Index += 5;</span>
|
|
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
} else <span class="cstat-no" title="statement not covered" >if (source.slice(Index, Index + 4) == "null") {</span>
|
|
<span class="cstat-no" title="statement not covered" > Index += 4;</span>
|
|
<span class="cstat-no" title="statement not covered" > return null;</span>
|
|
}
|
|
// Unrecognized token.
|
|
<span class="cstat-no" title="statement not covered" > abort();</span>
|
|
}
|
|
}
|
|
// Return the sentinel `$` character if the parser has reached the end
|
|
// of the source string.
|
|
<span class="cstat-no" title="statement not covered" > return "$";</span>
|
|
};
|
|
|
|
// Internal: Parses a JSON `value` token.
|
|
<span class="cstat-no" title="statement not covered" > var get = <span class="fstat-no" title="function not covered" >function (value) {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > var results, hasMembers;</span>
|
|
<span class="cstat-no" title="statement not covered" > if (value == "$") {</span>
|
|
// Unexpected end of input.
|
|
<span class="cstat-no" title="statement not covered" > abort();</span>
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > if (typeof value == "string") {</span>
|
|
<span class="cstat-no" title="statement not covered" > if ((charIndexBuggy ? value.charAt(0) : value[0]) == "@") {</span>
|
|
// Remove the sentinel `@` character.
|
|
<span class="cstat-no" title="statement not covered" > return value.slice(1);</span>
|
|
}
|
|
// Parse object and array literals.
|
|
<span class="cstat-no" title="statement not covered" > if (value == "[") {</span>
|
|
// Parses a JSON array, returning a new JavaScript array.
|
|
<span class="cstat-no" title="statement not covered" > results = [];</span>
|
|
<span class="cstat-no" title="statement not covered" > for (;; hasMembers || (hasMembers = true)) {</span>
|
|
<span class="cstat-no" title="statement not covered" > value = lex();</span>
|
|
// A closing square bracket marks the end of the array literal.
|
|
<span class="cstat-no" title="statement not covered" > if (value == "]") {</span>
|
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
}
|
|
// If the array literal contains elements, the current token
|
|
// should be a comma separating the previous element from the
|
|
// next.
|
|
<span class="cstat-no" title="statement not covered" > if (hasMembers) {</span>
|
|
<span class="cstat-no" title="statement not covered" > if (value == ",") {</span>
|
|
<span class="cstat-no" title="statement not covered" > value = lex();</span>
|
|
<span class="cstat-no" title="statement not covered" > if (value == "]") {</span>
|
|
// Unexpected trailing `,` in array literal.
|
|
<span class="cstat-no" title="statement not covered" > abort();</span>
|
|
}
|
|
} else {
|
|
// A `,` must separate each array element.
|
|
<span class="cstat-no" title="statement not covered" > abort();</span>
|
|
}
|
|
}
|
|
// Elisions and leading commas are not permitted.
|
|
<span class="cstat-no" title="statement not covered" > if (value == ",") {</span>
|
|
<span class="cstat-no" title="statement not covered" > abort();</span>
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > results.push(get(value));</span>
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > return results;</span>
|
|
} else <span class="cstat-no" title="statement not covered" >if (value == "{") {</span>
|
|
// Parses a JSON object, returning a new JavaScript object.
|
|
<span class="cstat-no" title="statement not covered" > results = {};</span>
|
|
<span class="cstat-no" title="statement not covered" > for (;; hasMembers || (hasMembers = true)) {</span>
|
|
<span class="cstat-no" title="statement not covered" > value = lex();</span>
|
|
// A closing curly brace marks the end of the object literal.
|
|
<span class="cstat-no" title="statement not covered" > if (value == "}") {</span>
|
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
}
|
|
// If the object literal contains members, the current token
|
|
// should be a comma separator.
|
|
<span class="cstat-no" title="statement not covered" > if (hasMembers) {</span>
|
|
<span class="cstat-no" title="statement not covered" > if (value == ",") {</span>
|
|
<span class="cstat-no" title="statement not covered" > value = lex();</span>
|
|
<span class="cstat-no" title="statement not covered" > if (value == "}") {</span>
|
|
// Unexpected trailing `,` in object literal.
|
|
<span class="cstat-no" title="statement not covered" > abort();</span>
|
|
}
|
|
} else {
|
|
// A `,` must separate each object member.
|
|
<span class="cstat-no" title="statement not covered" > abort();</span>
|
|
}
|
|
}
|
|
// Leading commas are not permitted, object property names must be
|
|
// double-quoted strings, and a `:` must separate each property
|
|
// name and value.
|
|
<span class="cstat-no" title="statement not covered" > if (value == "," || typeof value != "string" || (charIndexBuggy ? value.charAt(0) : value[0]) != "@" || lex() != ":") {</span>
|
|
<span class="cstat-no" title="statement not covered" > abort();</span>
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > results[value.slice(1)] = get(lex());</span>
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > return results;</span>
|
|
}
|
|
// Unexpected token encountered.
|
|
<span class="cstat-no" title="statement not covered" > abort();</span>
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > return value;</span>
|
|
};
|
|
|
|
// Internal: Updates a traversed object member.
|
|
<span class="cstat-no" title="statement not covered" > var update = <span class="fstat-no" title="function not covered" >function(source, property, callback) {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > var element = walk(source, property, callback);</span>
|
|
<span class="cstat-no" title="statement not covered" > if (element === undef) {</span>
|
|
<span class="cstat-no" title="statement not covered" > delete source[property];</span>
|
|
} else {
|
|
<span class="cstat-no" title="statement not covered" > source[property] = element;</span>
|
|
}
|
|
};
|
|
|
|
// Internal: Recursively traverses a parsed JSON object, invoking the
|
|
// `callback` function for each value. This is an implementation of the
|
|
// `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.
|
|
<span class="cstat-no" title="statement not covered" > var walk = <span class="fstat-no" title="function not covered" >function (source, property, callback) {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > var value = source[property], length;</span>
|
|
<span class="cstat-no" title="statement not covered" > if (typeof value == "object" && value) {</span>
|
|
// `forEach` can't be used to traverse an array in Opera <= 8.54
|
|
// because its `Object#hasOwnProperty` implementation returns `false`
|
|
// for array indices (e.g., `![1, 2, 3].hasOwnProperty("0")`).
|
|
<span class="cstat-no" title="statement not covered" > if (getClass.call(value) == arrayClass) {</span>
|
|
<span class="cstat-no" title="statement not covered" > for (length = value.length; length--;) {</span>
|
|
<span class="cstat-no" title="statement not covered" > update(value, length, callback);</span>
|
|
}
|
|
} else {
|
|
<span class="cstat-no" title="statement not covered" > forEach(value, <span class="fstat-no" title="function not covered" >function (property) {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > update(value, property, callback);</span>
|
|
});
|
|
}
|
|
}
|
|
<span class="cstat-no" title="statement not covered" > return callback.call(source, property, value);</span>
|
|
};
|
|
|
|
// Public: `JSON.parse`. See ES 5.1 section 15.12.2.
|
|
<span class="cstat-no" title="statement not covered" > JSON3.parse = <span class="fstat-no" title="function not covered" >function (source, callback) {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > var result, value;</span>
|
|
<span class="cstat-no" title="statement not covered" > Index = 0;</span>
|
|
<span class="cstat-no" title="statement not covered" > Source = "" + source;</span>
|
|
<span class="cstat-no" title="statement not covered" > result = get(lex());</span>
|
|
// If a JSON string contains multiple tokens, it is invalid.
|
|
<span class="cstat-no" title="statement not covered" > if (lex() != "$") {</span>
|
|
<span class="cstat-no" title="statement not covered" > abort();</span>
|
|
}
|
|
// Reset the parser state.
|
|
<span class="cstat-no" title="statement not covered" > Index = Source = null;</span>
|
|
<span class="cstat-no" title="statement not covered" > return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[""] = result, value), "", callback) : result;</span>
|
|
};
|
|
}
|
|
}
|
|
|
|
// Export for asynchronous module loaders.
|
|
<span class="missing-if-branch" title="if path not taken"" >I</span>if (isLoader) {
|
|
<span class="cstat-no" title="statement not covered" > define(<span class="fstat-no" title="function not covered" >function () {</span></span>
|
|
<span class="cstat-no" title="statement not covered" > return JSON3;</span>
|
|
});
|
|
}
|
|
}(this));
|
|
</pre></td></tr>
|
|
</table></pre>
|
|
|
|
</div>
|
|
<div class="footer">
|
|
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Sun Nov 17 2013 14:21:36 GMT-0800 (PST)</div>
|
|
</div>
|
|
|
|
<script src="../prettify.js"></script>
|
|
|
|
<script src="http://yui.yahooapis.com/3.6.0/build/yui/yui-min.js"></script>
|
|
<script>
|
|
|
|
YUI().use('datatable', function (Y) {
|
|
|
|
var formatters = {
|
|
pct: function (o) {
|
|
o.className += o.record.get('classes')[o.column.key];
|
|
try {
|
|
return o.value.toFixed(2) + '%';
|
|
} catch (ex) { return o.value + '%'; }
|
|
},
|
|
html: function (o) {
|
|
o.className += o.record.get('classes')[o.column.key];
|
|
return o.record.get(o.column.key + '_html');
|
|
}
|
|
},
|
|
defaultFormatter = function (o) {
|
|
o.className += o.record.get('classes')[o.column.key];
|
|
return o.value;
|
|
};
|
|
|
|
function getColumns(theadNode) {
|
|
var colNodes = theadNode.all('tr th'),
|
|
cols = [],
|
|
col;
|
|
colNodes.each(function (colNode) {
|
|
col = {
|
|
key: colNode.getAttribute('data-col'),
|
|
label: colNode.get('innerHTML') || ' ',
|
|
sortable: !colNode.getAttribute('data-nosort'),
|
|
className: colNode.getAttribute('class'),
|
|
type: colNode.getAttribute('data-type'),
|
|
allowHTML: colNode.getAttribute('data-html') === 'true' || colNode.getAttribute('data-fmt') === 'html'
|
|
};
|
|
col.formatter = formatters[colNode.getAttribute('data-fmt')] || defaultFormatter;
|
|
cols.push(col);
|
|
});
|
|
return cols;
|
|
}
|
|
|
|
function getRowData(trNode, cols) {
|
|
var tdNodes = trNode.all('td'),
|
|
i,
|
|
row = { classes: {} },
|
|
node,
|
|
name;
|
|
for (i = 0; i < cols.length; i += 1) {
|
|
name = cols[i].key;
|
|
node = tdNodes.item(i);
|
|
row[name] = node.getAttribute('data-value') || node.get('innerHTML');
|
|
row[name + '_html'] = node.get('innerHTML');
|
|
row.classes[name] = node.getAttribute('class');
|
|
//Y.log('Name: ' + name + '; Value: ' + row[name]);
|
|
if (cols[i].type === 'number') { row[name] = row[name] * 1; }
|
|
}
|
|
//Y.log(row);
|
|
return row;
|
|
}
|
|
|
|
function getData(tbodyNode, cols) {
|
|
var data = [];
|
|
tbodyNode.all('tr').each(function (trNode) {
|
|
data.push(getRowData(trNode, cols));
|
|
});
|
|
return data;
|
|
}
|
|
|
|
function replaceTable(node) {
|
|
if (!node) { return; }
|
|
var cols = getColumns(node.one('thead')),
|
|
data = getData(node.one('tbody'), cols),
|
|
table,
|
|
parent = node.get('parentNode');
|
|
|
|
table = new Y.DataTable({
|
|
columns: cols,
|
|
data: data,
|
|
sortBy: 'file'
|
|
});
|
|
parent.set('innerHTML', '');
|
|
table.render(parent);
|
|
}
|
|
|
|
Y.on('domready', function () {
|
|
replaceTable(Y.one('div.coverage-summary table'));
|
|
if (typeof prettyPrint === 'function') {
|
|
prettyPrint();
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|