forked from eficode/JavaFXLibrary
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjavafxlibrary.html
More file actions
912 lines (884 loc) · 227 KB
/
javafxlibrary.html
File metadata and controls
912 lines (884 loc) · 227 KB
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
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="-1">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta content="Robot Framework 3.1.1 (Jython 2.7.0 on java1.8.0_221)" name="Generator">
<link rel="icon" type="image/x-icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAqAAAAAAAAAAAAAAAAAAAALIAAAD/AAAA4AAAANwAAADcAAAA3AAAANwAAADcAAAA3AAAANwAAADcAAAA4AAAAP8AAACxAAAAAAAAAKYAAAD/AAAAuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/AAAA/wAAAKkAAAD6AAAAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN8AAAD/AAAA+gAAAMMAAAAAAAAAAgAAAGsAAABrAAAAawAAAGsAAABrAAAAawAAAGsAAABrAAAADAAAAAAAAADaAAAA/wAAAPoAAADDAAAAAAAAAIsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAANEAAAAAAAAA2gAAAP8AAAD6AAAAwwAAAAAAAAAAAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAFAAAAAAAAANoAAAD/AAAA+gAAAMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADaAAAA/wAAAPoAAADDAAAAAAAAADwAAAB8AAAAAAAAAGAAAABcAAAAAAAAAH8AAABKAAAAAAAAAAAAAAAAAAAA2gAAAP8AAAD6AAAAwwAAAAAAAADCAAAA/wAAACkAAADqAAAA4QAAAAAAAAD7AAAA/wAAALAAAAAGAAAAAAAAANoAAAD/AAAA+gAAAMMAAAAAAAAAIwAAAP4AAAD/AAAA/wAAAGAAAAAAAAAAAAAAAMkAAAD/AAAAigAAAAAAAADaAAAA/wAAAPoAAADDAAAAAAAAAAAAAAAIAAAAcAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAA2gAAAP8AAAD7AAAAywAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN4AAAD/AAAAqwAAAP8AAACvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALIAAAD/AAAAsgAAAAAAAAC5AAAA/wAAAMoAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMkAAAD/AAAAvAAAAAAAAAAAAAAAAAAAAKwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAArQAAAAAAAAAAwAMAAIABAAAf+AAAP/wAAD/8AAAgBAAAP/wAAD/8AAA//AAAJIwAADHEAAA//AAAP/wAAB/4AACAAQAAwAMAAA==">
<style media="all" type="text/css">
body {
background: white;
color: black;
font-size: small;
font-family: sans-serif;
padding: 0 0.5em;
}
.metadata th {
text-align: left;
padding-right: 1em;
}
a.name, span.name {
font-style: italic;
}
a, a:link, a:visited {
color: #c30;
}
a img {
border: 1px solid #c30 !important;
}
a:hover, a:active {
text-decoration: underline;
color: black;
}
a:hover {
text-decoration: underline !important;
}
.shortcuts {
margin: 1em 0;
font-size: 0.9em;
}
.shortcuts a {
display: inline-block;
text-decoration: none;
white-space: nowrap;
color: black;
}
.shortcuts a::first-letter {
font-weight: bold;
letter-spacing: 0.1em;
}
.normal-first-letter::first-letter {
font-weight: normal !important;
letter-spacing: 0 !important;
}
.keywords {
border: 1px solid #ccc;
border-collapse: collapse;
empty-cells: show;
margin: 0.3em 0;
width: 100%;
}
.keywords th, .keywords td {
border: 1px solid #ccc;
padding: 0.2em;
vertical-align: top;
}
.keywords th {
background: #ddd;
color: black;
}
.kw, .args, .tags {
min-width: 100px;
max-width: 20%;
}
td.kw a {
color: inherit;
text-decoration: none;
font-weight: bold;
}
.args span {
font-style: italic;
padding: 0 0.1em;
}
.tags a {
color: inherit;
text-decoration: none;
padding: 0 0.1em;
}
.footer {
font-size: 0.9em;
}
/* Docs originating from HTML and reST are wrapped to divs. */
.doc div > *:first-child {
margin-top: 0;
}
.doc div > *:last-child { /* Does not work with IE8. */
margin-bottom: 0;
}
#search, #open-search {
position: fixed;
bottom: 5px;
right: 5px;
z-index: 1000;
}
#search {
width: 30em;
display: none;
}
#open-search {
border: 2px solid #ccc;
border-radius: 4px;
width: 40px;
height: 40px;
background-color: white;
background-repeat: no-repeat;
background-position: center;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAY5JREFUSImt1LtrFGEUBfCfURsFHwEr29UNkS3MFklrQK0EIYUk/5IQ0FSmCCKW1mpAommToCKoK+lsLUKeSFbXFLuT3B13Hjt64INvOPeec+fOnUs2mpjHBrbRwQE+YQFTObm5qGMZf0qct7gxjPgM9kqKJ+cAs2XFf4fEX3iOe7iKsxjFHTxFO8R2ikzqqcq/oVFQUANfUm8ynhUce97qVVoGo/gaclcGBTVDQDuvigw09Lfrr+maD+TSkOIJngWNx2lyI5C3KxrcDRof0+R2IC9XNLgSNPbTZDKa7YricFr/v3EqIUZ0xxPO4FxFg0vhnoz7scFmICcqGjTDvRWJEayG57mKBg/C/U2anHDSu5+oDSlex6GTlTE2KOhVMPmACyXFL+qOZZL7Xf/3OMY17KZMrheI13px6e26nmVyX3eDxnYt4lav0qTiaTzp8VkrPNdkNyOpkyM4lEkNL0uK/CjgXw8ySHATD7GGLd0/fgfv8QiTOI93BSb/jCKT/4Isk1ZOTiWTF0H8M8aPANvFyARlADGFAAAAAElFTkSuQmCC);
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlnaHQ9IjgiIHZpZXdCb3g9IjAgMCA4IDgiPgogIDxwYXRoIGQ9Ik0zLjUgMGMtMS45MyAwLTMuNSAxLjU3LTMuNSAzLjVzMS41NyAzLjUgMy41IDMuNWMuNTkgMCAxLjE3LS4xNCAxLjY2LS40MWExIDEgMCAwIDAgLjEzLjEzbDEgMWExLjAyIDEuMDIgMCAxIDAgMS40NC0xLjQ0bC0xLTFhMSAxIDAgMCAwLS4xNi0uMTNjLjI3LS40OS40NC0xLjA2LjQ0LTEuNjYgMC0xLjkzLTEuNTctMy41LTMuNS0zLjV6bTAgMWMxLjM5IDAgMi41IDEuMTEgMi41IDIuNSAwIC42Ni0uMjQgMS4yNy0uNjYgMS43Mi0uMDEuMDEtLjAyLjAyLS4wMy4wM2ExIDEgMCAwIDAtLjEzLjEzYy0uNDQuNC0xLjA0LjYzLTEuNjkuNjMtMS4zOSAwLTIuNS0xLjExLTIuNS0yLjVzMS4xMS0yLjUgMi41LTIuNXoiCiAgLz4KPC9zdmc+), none;
background-size: 24px 24px;
}
#open-search:hover {
background-color: #ccc;
}
fieldset {
background: white;
border: 2px solid #ccc;
border-radius: 4px;
padding: 6px 8px;
}
fieldset fieldset {
border: 1px solid #ccc;
margin: 4px 0;
}
#search-title {
font-size: 1.1em;
font-weight: bold;
letter-spacing: 1px;
}
#search-string {
box-sizing: border-box;
width: 100%;
}
#hide-unmatched {
margin: 0.5em 0 0 1em;
}
#search-buttons {
float: right;
}
.highlight {
background: yellow;
}
.no-match {
color: gray !important;
}
tr.no-match.hide-unmatched {
display: none;
}
</style>
<style media="all" type="text/css">
/* Pygments 'default' style sheet. Generated with Pygments 2.1.3 using:
pygmentize -S default -f html -a .code > src/robot/htmldata/libdoc/pygments.css
*/
.code .hll { background-color: #ffffcc }
.code { background: #f8f8f8; }
.code .c { color: #408080; font-style: italic } /* Comment */
.code .err { border: 1px solid #FF0000 } /* Error */
.code .k { color: #008000; font-weight: bold } /* Keyword */
.code .o { color: #666666 } /* Operator */
.code .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.code .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.code .cp { color: #BC7A00 } /* Comment.Preproc */
.code .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.code .c1 { color: #408080; font-style: italic } /* Comment.Single */
.code .cs { color: #408080; font-style: italic } /* Comment.Special */
.code .gd { color: #A00000 } /* Generic.Deleted */
.code .ge { font-style: italic } /* Generic.Emph */
.code .gr { color: #FF0000 } /* Generic.Error */
.code .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.code .gi { color: #00A000 } /* Generic.Inserted */
.code .go { color: #888888 } /* Generic.Output */
.code .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.code .gs { font-weight: bold } /* Generic.Strong */
.code .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.code .gt { color: #0044DD } /* Generic.Traceback */
.code .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.code .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.code .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.code .kp { color: #008000 } /* Keyword.Pseudo */
.code .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.code .kt { color: #B00040 } /* Keyword.Type */
.code .m { color: #666666 } /* Literal.Number */
.code .s { color: #BA2121 } /* Literal.String */
.code .na { color: #7D9029 } /* Name.Attribute */
.code .nb { color: #008000 } /* Name.Builtin */
.code .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.code .no { color: #880000 } /* Name.Constant */
.code .nd { color: #AA22FF } /* Name.Decorator */
.code .ni { color: #999999; font-weight: bold } /* Name.Entity */
.code .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.code .nf { color: #0000FF } /* Name.Function */
.code .nl { color: #A0A000 } /* Name.Label */
.code .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.code .nt { color: #008000; font-weight: bold } /* Name.Tag */
.code .nv { color: #19177C } /* Name.Variable */
.code .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.code .w { color: #bbbbbb } /* Text.Whitespace */
.code .mb { color: #666666 } /* Literal.Number.Bin */
.code .mf { color: #666666 } /* Literal.Number.Float */
.code .mh { color: #666666 } /* Literal.Number.Hex */
.code .mi { color: #666666 } /* Literal.Number.Integer */
.code .mo { color: #666666 } /* Literal.Number.Oct */
.code .sb { color: #BA2121 } /* Literal.String.Backtick */
.code .sc { color: #BA2121 } /* Literal.String.Char */
.code .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.code .s2 { color: #BA2121 } /* Literal.String.Double */
.code .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.code .sh { color: #BA2121 } /* Literal.String.Heredoc */
.code .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.code .sx { color: #008000 } /* Literal.String.Other */
.code .sr { color: #BB6688 } /* Literal.String.Regex */
.code .s1 { color: #BA2121 } /* Literal.String.Single */
.code .ss { color: #19177C } /* Literal.String.Symbol */
.code .bp { color: #008000 } /* Name.Builtin.Pseudo */
.code .vc { color: #19177C } /* Name.Variable.Class */
.code .vg { color: #19177C } /* Name.Variable.Global */
.code .vi { color: #19177C } /* Name.Variable.Instance */
.code .il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<style media="print" type="text/css">
body {
margin: 0;
padding: 0;
font-size: 8pt;
}
a {
text-decoration: none;
}
#search, #open-search {
display: none;
}
</style>
<style media="all" type="text/css">
#javascript-disabled {
width: 600px;
margin: 100px auto 0 auto;
padding: 20px;
color: black;
border: 1px solid #ccc;
background: #eee;
}
#javascript-disabled h1 {
width: 100%;
float: none;
}
#javascript-disabled ul {
font-size: 1.2em;
}
#javascript-disabled li {
margin: 0.5em 0;
}
#javascript-disabled b {
font-style: italic;
}
</style>
<style media="all" type="text/css">
.doc > * {
margin: 0.7em 1em 0.1em 1em;
padding: 0;
}
.doc > p, .doc > h1, .doc > h2, .doc > h3, .doc > h4 {
margin: 0.7em 0 0.1em 0;
}
.doc > *:first-child {
margin-top: 0.1em;
}
.doc table {
border: 1px solid #ccc;
background: transparent;
border-collapse: collapse;
empty-cells: show;
font-size: 0.9em;
}
.doc table th, .doc table td {
border: 1px solid #ccc;
background: transparent;
padding: 0.1em 0.3em;
height: 1.2em;
}
.doc table th {
text-align: center;
letter-spacing: 0.1em;
}
.doc pre {
font-size: 1.1em;
letter-spacing: 0.05em;
background: #f4f4f4;
}
.doc code {
padding: 0 0.2em;
letter-spacing: 0.05em;
background: #eee;
}
.doc li {
list-style-position: inside;
list-style-type: square;
}
.doc img {
border: 1px solid #ccc;
}
.doc hr {
background: #ccc;
height: 1px;
border: 0;
}
</style>
<script type="text/javascript">
window.util = function () {
function map(elems, func) {
var ret = [];
for (var i = 0, len = elems.length; i < len; i++) {
ret[i] = func(elems[i]);
}
return ret;
}
function filter(elems, predicate) {
var ret = [];
for (var i = 0, len = elems.length; i < len; i++) {
if (predicate(elems[i]))
ret.push(elems[i]);
}
return ret;
}
function all(elems) {
for (var i = 0, len = elems.length; i < len; i++) {
if (!elems[i])
return false;
}
return true;
}
function any(elems) {
for (var i = 0, len = elems.length; i < len; i++) {
if (elems[i])
return elems[i];
}
return false;
}
function contains(elems, e) {
for (var i = 0, len = elems.length; i < len; i++) {
if (elems[i] == e)
return true;
}
return false;
}
function last(items) {
return items[items.length-1];
}
function unescape(string) {
return string.replace(/</g, '<').replace(/>/g, '>').replace(/&/g, '&');
}
function escape(string) {
return string.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
}
function normalize(string) {
return string.toLowerCase().replace(/ /g, '').replace(/_/g, '');
}
function regexpEscape(string) {
return string.replace(/[-[\]{}()+?*.,\\^$|#]/g, "\\$&");
}
function Matcher(pattern) {
pattern = regexpEscape(normalize(pattern));
var rePattern = '^' + pattern.replace(/\\\?/g, '.').replace(/\\\*/g, '[\\s\\S]*') + '$';
var regexp = new RegExp(rePattern);
function matches(string) {
return regexp.test(normalize(string));
}
return {
matches: matches,
matchesAny: function (strings) {
for (var i = 0, len = strings.length; i < len; i++)
if (matches(strings[i]))
return true;
return false;
}
};
}
function formatParentName(item) {
var parentName = item.fullName.slice(0, item.fullName.length - item.name.length);
return parentName.replace(/\./g, ' . ');
}
function timeFromDate(date) {
if (!date)
return 'N/A';
return formatTime(date.getHours(), date.getMinutes(),
date.getSeconds(), date.getMilliseconds());
}
function dateFromDate(date) {
if (!date)
return 'N/A';
return padTo(date.getFullYear(), 4) +
padTo(date.getMonth() + 1, 2) +
padTo(date.getDate(), 2);
}
function dateTimeFromDate(date) {
if (!date)
return 'N/A';
return dateFromDate(date) + ' ' + timeFromDate(date);
}
function formatTime(hours, minutes, seconds, milliseconds) {
return padTo(hours, 2) + ':' +
padTo(minutes, 2) + ':' +
padTo(seconds, 2) + '.' +
padTo(milliseconds, 3);
}
function formatElapsed(elapsed) {
var millis = elapsed;
var hours = Math.floor(millis / (60 * 60 * 1000));
millis -= hours * 60 * 60 * 1000;
var minutes = Math.floor(millis / (60 * 1000));
millis -= minutes * 60 * 1000;
var seconds = Math.floor(millis / 1000);
millis -= seconds * 1000;
return formatTime(hours, minutes, seconds, millis);
}
function padTo(number, len) {
var numString = number + "";
while (numString.length < len) numString = "0" + numString;
return numString;
}
function timestamp(millis) {
// used also by tools that do not set window.output.baseMillis
var base = window.output ? window.output.baseMillis : 0;
return new Date(base + millis);
}
function createGeneratedString(timestamp) {
var date = new Date(timestamp);
var dt = dateTimeFromDate(date).slice(0, 17); // drop millis
var offset = date.getTimezoneOffset();
var sign = offset > 0 ? '-' : '+';
var hh = Math.floor(Math.abs(offset) / 60);
var mm = Math.abs(offset) % 60;
return dt + ' UTC' + sign + padTo(hh, 2) + ':' + padTo(mm, 2);
}
function createGeneratedAgoString(timestamp) {
function timeString(time, shortUnit) {
var unit = {y: 'year', d: 'day', h: 'hour', m: 'minute',
s: 'second'}[shortUnit];
var end = time == 1 ? ' ' : 's ';
return time + ' ' + unit + end;
}
function compensateLeapYears(days, years) {
// Not a perfect algorithm but ought to be enough
return days - Math.floor(years / 4);
}
var generated = Math.round(timestamp / 1000);
var current = Math.round(new Date().getTime() / 1000);
var elapsed = current - generated;
var prefix = '';
if (elapsed < 0) {
prefix = '- ';
elapsed = Math.abs(elapsed);
}
var secs = elapsed % 60;
var mins = Math.floor(elapsed / 60) % 60;
var hours = Math.floor(elapsed / (60*60)) % 24;
var days = Math.floor(elapsed / (60*60*24)) % 365;
var years = Math.floor(elapsed / (60*60*24*365));
if (years) {
days = compensateLeapYears(days, years);
return prefix + timeString(years, 'y') + timeString(days, 'd');
} else if (days) {
return prefix + timeString(days, 'd') + timeString(hours, 'h');
} else if (hours) {
return prefix + timeString(hours, 'h') + timeString(mins, 'm');
} else if (mins) {
return prefix + timeString(mins, 'm') + timeString(secs, 's');
} else {
return prefix + timeString(secs, 's');
}
}
function parseQueryString(query) {
var result = {};
if (!query)
return result;
var params = query.split('&');
var parts;
function decode(item) {
return decodeURIComponent(item.replace('+', ' '));
}
for (var i = 0, len = params.length; i < len; i++) {
parts = params[i].split('=');
result[decode(parts.shift())] = decode(parts.join('='));
}
return result;
}
return {
map: map,
filter: filter,
all: all,
any: any,
contains: contains,
last: last,
escape: escape,
unescape: unescape,
normalize: normalize,
regexpEscape: regexpEscape,
Matcher: Matcher,
formatParentName: formatParentName,
timeFromDate: timeFromDate,
dateFromDate: dateFromDate,
dateTimeFromDate: dateTimeFromDate,
formatElapsed: formatElapsed,
timestamp: timestamp,
createGeneratedString: createGeneratedString,
createGeneratedAgoString: createGeneratedAgoString,
parseQueryString: parseQueryString
};
}();
</script>
<script type="text/javascript">
/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||g(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},w.extend({expando:"jQuery"+("3.3.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==c.call(e))&&(!(t=i(e))||"function"==typeof(n=f.call(t,"constructor")&&t.constructor)&&p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},each:function(e,t){var n,r=0;if(C(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?w.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o<a;o++)(r=!t(e[o],o))!==s&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return a.apply([],s)},guid:1,support:h}),"function"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function C(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!g(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",I="\\["+M+"*("+R+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+R+"))|)"+M+"*\\]",W=":("+R+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+I+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),F=new RegExp("^"+M+"*,"+M+"*"),_=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="<a id='"+b+"'></a><select id='"+b+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=fe(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=oe.tokenize=function(e,t){var n,i,o,a,s,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=r.preFilter;while(s){n&&!(i=F.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=_.exec(s))&&(n=i.shift(),o.push({value:n,type:i[0].replace(B," ")}),s=s.slice(n.length));for(a in r.filter)!(i=V[a].exec(s))||l[a]&&!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return t?s.length:s?oe.error(e):k(e,u).slice(0)};function ve(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function me(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&"parentNode"===o,s=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[T,s];if(u){while(t=t[r])if((1===t.nodeType||a)&&e(t,n,u))return!0}else while(t=t[r])if(1===t.nodeType||a)if(f=t[b]||(t[b]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&&l[0]===T&&l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function xe(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r<i;r++)oe(e,t[r],n);return n}function we(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Te(e,t,n,r,i,o){return r&&!r[b]&&(r=Te(r)),i&&!i[b]&&(i=Te(i,o)),se(function(o,a,s,u){var l,c,f,p=[],d=[],h=a.length,g=o||be(t||"*",s.nodeType?[s]:s,[]),y=!e||!o&&t?g:we(g,p,e,s,u),v=n?i||(o?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r){l=we(v,d),r(l,[],s,u),c=l.length;while(c--)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f))}if(o){if(i||e){if(i){l=[],c=v.length;while(c--)(f=v[c])&&l.push(y[c]=f);i(null,v=[],l,u)}c=v.length;while(c--)(f=v[c])&&(l=i?O(o,f):p[c])>-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u<o;u++)if(n=r.relative[e[u].type])p=[me(xe(p),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i<o;i++)if(r.relative[e[i].type])break;return Te(u>1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u<i&&Ce(e.slice(u,i)),i<o&&Ce(e=e.slice(i)),i<o&&ve(e))}p.push(n)}return xe(p)}function Ee(e,t){var n=t.length>0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t<r;t++)if(w.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,i[t],n);return r>1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&w(e);if(!D.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s<o.length)!1===o[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=o.length,n=!1)}e.memory||(n=!1),t=!1,i&&(o=n?[]:"")},l={add:function(){return o&&(n&&!t&&(s=o.length-1,a.push(n)),function t(n){w.each(n,function(n,r){g(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&"string"!==x(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return w.each(arguments,function(e,t){var n;while((n=w.inArray(t,o,n))>-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t<o)){if((e=r.apply(s,u))===n.promise())throw new TypeError("Thenable self-resolution");l=e&&("object"==typeof e||"function"==typeof e)&&e.then,g(l)?i?l.call(e,a(o,n,I,i),a(o,n,W,i)):(o++,l.call(e,a(o,n,I,i),a(o,n,W,i),a(o,n,I,n.notifyWith))):(r!==I&&(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},c=i?l:function(){try{l()}catch(e){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(e,c.stackTrace),t+1>=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},X=/^-ms-/,U=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(X,"ms-").replace(U,V)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=w.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[G(t)]=n;else for(r in t)i[G(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(G):(t=G(t))in r?[t]:t.match(M)||[]).length;while(n--)delete r[t[n]]}(void 0===t||w.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!w.isEmptyObject(t)}};var J=new Q,K=new Q,Z=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ee=/[A-Z]/g;function te(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Z.test(e)?JSON.parse(e):e)}function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(ee,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n=te(n)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=K.get(o),1===o.nodeType&&!J.get(o,"hasDataAttrs"))){n=a.length;while(n--)a[n]&&0===(r=a[n].name).indexOf("data-")&&(r=G(r.slice(5)),ne(o,r,i[r]));J.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof e?this.each(function(){K.set(this,e)}):z(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=K.get(o,e)))return n;if(void 0!==(n=ne(o,e)))return n}else this.each(function(){K.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=w.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=J.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var re=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ie=new RegExp("^(?:([+-])=|)("+re+")([a-z%]*)$","i"),oe=["Top","Right","Bottom","Left"],ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&w.contains(e.ownerDocument,e)&&"none"===w.css(e,"display")},se=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i};function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,"")},u=s(),l=n&&n[3]||(w.cssNumber[t]?"":"px"),c=(w.cssNumber[t]||"px"!==l&&+u)&&ie.exec(w.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)w.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,w.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,i=le[r];return i||(t=n.body.appendChild(n.createElement(r)),i=w.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),le[r]=i,i)}function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)(r=e[o]).style&&(n=r.style.display,t?("none"===n&&(i[o]=J.get(r,"display")||null,i[o]||(r.style.display="")),""===r.style.display&&ae(r)&&(i[o]=ce(r))):"none"!==n&&(i[o]="none",J.set(r,"display",n)));for(o=0;o<a;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}w.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?w(this).show():w(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],"globalEval",!t||J.get(t[n],"globalEval"))}var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))w.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+w.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;w.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&w.inArray(o,r)>-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="<textarea>x</textarea>",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n<arguments.length;n++)u[n]=arguments[n];if(t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){s=w.event.handlers.call(this,t,l),n=0;while((o=s[n++])&&!t.isPropagationStopped()){t.currentTarget=o.elem,r=0;while((a=o.handlers[r++])&&!t.isImmediatePropagationStopped())t.rnamespace&&!t.rnamespace.test(a.namespace)||(t.handleObj=a,t.data=a.data,void 0!==(i=((w.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&&!1===(t.result=i)&&(t.preventDefault(),t.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?w(i,this).index(l)>-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:g(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Se()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===Se()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&N(this,"input"))return this.click(),!1},_default:function(e){return N(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ee:ke,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:ke,isPropagationStopped:ke,isImmediatePropagationStopped:ke,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Te.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},w.event.addProp),w.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||w.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return De(this,e,t,n,r)},one:function(e,t,n,r){return De(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=ke),this.each(function(){w.event.remove(this,e,n,t)})}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/<script|<style|<link/i,je=/checked\s*(?:[^=]|=\s*.checked.)/i,qe=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n<r;n++)w.event.add(t,i,l[i][n])}K.hasData(e)&&(s=K.access(e),u=w.extend({},s),K.set(t,u))}}function Me(e,t){var n=t.nodeName.toLowerCase();"input"===n&&pe.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function Re(e,t,n,r){t=a.apply([],t);var i,o,s,u,l,c,f=0,p=e.length,d=p-1,y=t[0],v=g(y);if(v||p>1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f<p;f++)l=i,f!==d&&(l=w.clone(l,!0,!0),u&&w.merge(s,ye(l,"script"))),n.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f<u;f++)l=s[f],he.test(l.type||"")&&!J.access(l,"globalEval")&&w.contains(c,l)&&(l.src&&"module"!==(l.type||"").toLowerCase()?w._evalUrl&&w._evalUrl(l.src):m(l.textContent.replace(qe,""),c,l))}return e}function Ie(e,t,n){for(var r,i=t?w.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||w.cleanData(ye(r)),r.parentNode&&(n&&w.contains(r.ownerDocument,r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e.replace(Ne,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r<i;r++)Me(o[r],a[r]);if(t)if(n)for(o=o||ye(e),a=a||ye(s),r=0,i=o.length;r<i;r++)Pe(o[r],a[r]);else Pe(e,s);return(a=ye(s,"script")).length>0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Re(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(ye(this)),n&&n.replaceChild(t,this))},e)}}),w.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){w.fn[e]=function(e){for(var n,r=[],i=w(e),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),w(i[a])[t](n),s.apply(r,n.get());return this.pushStack(r)}});var We=new RegExp("^("+re+")(?!px)[a-z%]+$","i"),$e=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Be=new RegExp(oe.join("|"),"i");!function(){function t(){if(c){l.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",c.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",be.appendChild(l).appendChild(c);var t=e.getComputedStyle(c);i="1%"!==t.top,u=12===n(t.marginLeft),c.style.right="60%",s=36===n(t.right),o=36===n(t.width),c.style.position="absolute",a=36===c.offsetWidth||"absolute",be.removeChild(l),c=null}}function n(e){return Math.round(parseFloat(e))}var i,o,a,s,u,l=r.createElement("div"),c=r.createElement("div");c.style&&(c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",h.clearCloneStyle="content-box"===c.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),i},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),a}}))}();function Fe(e,t,n){var r,i,o,a,s=e.style;return(n=n||$e(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||w.contains(e.ownerDocument,e)||(a=w.style(e,t)),!h.pixelBoxStyles()&&We.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}var ze=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ue={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"},Ge=["Webkit","Moz","ms"],Ye=r.createElement("div").style;function Qe(e){if(e in Ye)return e;var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;while(n--)if((e=Ge[n]+t)in Ye)return e}function Je(e){var t=w.cssProps[e];return t||(t=w.cssProps[e]=Qe(e)||e),t}function Ke(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ze(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=w.css(e,n+oe[a],!0,i)),r?("content"===n&&(u-=w.css(e,"padding"+oe[a],!0,i)),"margin"!==n&&(u-=w.css(e,"border"+oe[a]+"Width",!0,i))):(u+=w.css(e,"padding"+oe[a],!0,i),"padding"!==n?u+=w.css(e,"border"+oe[a]+"Width",!0,i):s+=w.css(e,"border"+oe[a]+"Width",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a<i;a++)o[t[a]]=w.css(e,t[a],!1,r);return o}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length>1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ct(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=J.get(e,"fxshow");n.queue||(null==(a=w._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,w.queue(e,"fx").length||a.empty.fire()})}));for(r in t)if(i=t[r],it.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(d)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=J.get(e,"display")),"none"===(c=w.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=w.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===w.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(y?"hidden"in y&&(g=y.hidden):y=J.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&fe([e],!0),p.done(function(){g||fe([e]),J.remove(e,"fxshow");for(r in d)w.style(e,r,d[r])})),u=lt(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}}function ft(e,t){var n,r,i,o,a;for(n in e)if(r=G(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=w.cssHooks[r])&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function pt(e,t,n){var r,i,o=0,a=pt.prefilters.length,s=w.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,a=l.tweens.length;o<a;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r<1&&a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(ft(c,l.opts.specialEasing);o<a;o++)if(r=pt.prefilters[o].call(l,e,c,l.opts))return g(r.stop)&&(w._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,lt,l),g(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation=w.extend(pt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){g(e)?(t=e,e=["*"]):e=e.match(M);for(var n,r=0,i=e.length;r<i;r++)n=e[r],pt.tweeners[n]=pt.tweeners[n]||[],pt.tweeners[n].unshift(t)},prefilters:[ct],prefilter:function(e,t){t?pt.prefilters.unshift(e):pt.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&"object"==typeof e?w.extend({},e):{complete:n||!n&&t||g(e)&&e,duration:e,easing:n&&t||t&&!g(t)&&t};return w.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){g(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=w.isEmptyObject(e),o=w.speed(t,n,r),a=function(){var t=pt(this,w.extend({},e),o);(i||J.get(this,"finish"))&&t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each(function(){var t=!0,i=null!=e&&e+"queueHooks",o=w.timers,a=J.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ot.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||w.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||"fx"),this.each(function(){var t,n=J.get(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=w.timers,a=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),w.each(["toggle","show","hide"],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,i)}}),w.each({slideDown:ut("show"),slideUp:ut("hide"),slideToggle:ut("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),nt=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){rt||(rt=!0,at())},w.fx.stop=function(){rt=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||"fx",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement("input"),t=r.createElement("select").appendChild(r.createElement("option"));e.type="checkbox",h.checkOn=""!==e.value,h.optSelected=t.selected,(e=r.createElement("input")).value="t",e.type="radio",h.radioValue="t"===e.value}();var dt,ht=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return z(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!N(n.parentNode,"optgroup"))){if(t=w(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=w.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=w.inArray(w.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("<script>").prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&o("error"===e.type?404:200,e.type)}),r.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Yt=[],Qt=/(=)\?(?=&|$)|\?\?/;w.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Yt.pop()||w.expando+"_"+Et++;return this[e]=!0,e}}),w.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,a,s=!1!==t.jsonp&&(Qt.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&Qt.test(t.data)&&"data");if(s||"jsonp"===t.dataTypes[0])return i=t.jsonpCallback=g(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Qt,"$1"+i):!1!==t.jsonp&&(t.url+=(kt.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return a||w.error(i+" was not called"),a[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?w(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Yt.push(i)),a&&g(o)&&o(a[0]),a=o=void 0}),"script"}),h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument("").body;return e.innerHTML="<form></form><form></form>",2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if("string"!=typeof e)return[];"boolean"==typeof t&&(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument("")).createElement("base")).href=r.location.href,t.head.appendChild(i)):t=r),o=A.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&&a.length&&w(a).remove(),w.merge([],o.childNodes))},w.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return s>-1&&(r=vt(e.slice(s)),e=e.slice(0,s)),g(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),a.length>0&&w.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?w("<div>").append(w.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},w.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=w.css(e,"position"),f=w(e),p={};"static"===c&&(e.style.position="relative"),s=f.offset(),o=w.css(e,"top"),u=w.css(e,"left"),(l=("absolute"===c||"fixed"===c)&&(o+u).indexOf("auto")>-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),g(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+i),"using"in t?t.using.call(e,p):f.css(p)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===w.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===w.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=w(e).offset()).top+=w.css(e,"borderTopWidth",!0),i.left+=w.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-w.css(r,"marginTop",!0),left:t.left-i.left-w.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===w.css(e,"position"))e=e.offsetParent;return e||be})}}),w.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;w.fn[e]=function(r){return z(this,function(e,r,i){var o;if(y(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each(["top","left"],function(e,t){w.cssHooks[t]=_e(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),We.test(n)?w(e).position()[t]+"px":n})}),w.each({Height:"height",Width:"width"},function(e,t){w.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&&(n||"boolean"!=typeof i),s=n||(!0===i||!0===o?"margin":"border");return z(this,function(t,n,i){var o;return y(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?w.css(t,n,s):w.style(t,n,i,s)},t,a?i:void 0,a)}})}),w.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),w.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=N,w.isFunction=g,w.isWindow=y,w.camelCase=G,w.type=x,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return w});var Jt=e.jQuery,Kt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=Kt),t&&e.jQuery===w&&(e.jQuery=Jt),w},t||(e.jQuery=e.$=w),w});
</script>
<script type="text/javascript">
/*
* jQuery Templates Plugin 1.0.0pre
* http://github.com/jquery/jquery-tmpl
* Requires jQuery 1.4.2
*
* Copyright Software Freedom Conservancy, Inc.
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*/
(function(a){var r=a.fn.domManip,d="_tmplitem",q=/^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,b={},f={},e,p={key:0,data:{}},i=0,c=0,l=[];function g(g,d,h,e){var c={data:e||(e===0||e===false)?e:d?d.data:{},_wrap:d?d._wrap:null,tmpl:null,parent:d||null,nodes:[],calls:u,nest:w,wrap:x,html:v,update:t};g&&a.extend(c,g,{nodes:[],parent:d});if(h){c.tmpl=h;c._ctnt=c._ctnt||c.tmpl(a,c);c.key=++i;(l.length?f:b)[i]=c}return c}a.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(f,d){a.fn[f]=function(n){var g=[],i=a(n),k,h,m,l,j=this.length===1&&this[0].parentNode;e=b||{};if(j&&j.nodeType===11&&j.childNodes.length===1&&i.length===1){i[d](this[0]);g=this}else{for(h=0,m=i.length;h<m;h++){c=h;k=(h>0?this.clone(true):this).get();a(i[h])[d](k);g=g.concat(k)}c=0;g=this.pushStack(g,f,i.selector)}l=e;e=null;a.tmpl.complete(l);return g}});a.fn.extend({tmpl:function(d,c,b){return a.tmpl(this[0],d,c,b)},tmplItem:function(){return a.tmplItem(this[0])},template:function(b){return a.template(b,this[0])},domManip:function(d,m,k){if(d[0]&&a.isArray(d[0])){var g=a.makeArray(arguments),h=d[0],j=h.length,i=0,f;while(i<j&&!(f=a.data(h[i++],"tmplItem")));if(f&&c)g[2]=function(b){a.tmpl.afterManip(this,b,k)};r.apply(this,g)}else r.apply(this,arguments);c=0;!e&&a.tmpl.complete(b);return this}});a.extend({tmpl:function(d,h,e,c){var i,k=!c;if(k){c=p;d=a.template[d]||a.template(null,d);f={}}else if(!d){d=c.tmpl;b[c.key]=c;c.nodes=[];c.wrapped&&n(c,c.wrapped);return a(j(c,null,c.tmpl(a,c)))}if(!d)return[];if(typeof h==="function")h=h.call(c||{});e&&e.wrapped&&n(e,e.wrapped);i=a.isArray(h)?a.map(h,function(a){return a?g(e,c,d,a):null}):[g(e,c,d,h)];return k?a(j(c,null,i)):i},tmplItem:function(b){var c;if(b instanceof a)b=b[0];while(b&&b.nodeType===1&&!(c=a.data(b,"tmplItem"))&&(b=b.parentNode));return c||p},template:function(c,b){if(b){if(typeof b==="string")b=o(b);else if(b instanceof a)b=b[0]||{};if(b.nodeType)b=a.data(b,"tmpl")||a.data(b,"tmpl",o(b.innerHTML));return typeof c==="string"?(a.template[c]=b):b}return c?typeof c!=="string"?a.template(null,c):a.template[c]||a.template(null,q.test(c)?c:a(c)):null},encode:function(a){return(""+a).split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'")}});a.extend(a.tmpl,{tag:{tmpl:{_default:{$2:"null"},open:"if($notnull_1){__=__.concat($item.nest($1,$2));}"},wrap:{_default:{$2:"null"},open:"$item.calls(__,$1,$2);__=[];",close:"call=$item.calls();__=call._.concat($item.wrap(call,__));"},each:{_default:{$2:"$index, $value"},open:"if($notnull_1){$.each($1a,function($2){with(this){",close:"}});}"},"if":{open:"if(($notnull_1) && $1a){",close:"}"},"else":{_default:{$1:"true"},open:"}else if(($notnull_1) && $1a){"},html:{open:"if($notnull_1){__.push($1a);}"},"=":{_default:{$1:"$data"},open:"if($notnull_1){__.push($.encode($1a));}"},"!":{open:""}},complete:function(){b={}},afterManip:function(f,b,d){var e=b.nodeType===11?a.makeArray(b.childNodes):b.nodeType===1?[b]:[];d.call(f,b);m(e);c++}});function j(e,g,f){var b,c=f?a.map(f,function(a){return typeof a==="string"?e.key?a.replace(/(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g,"$1 "+d+'="'+e.key+'" $2'):a:j(a,e,a._ctnt)}):e;if(g)return c;c=c.join("");c.replace(/^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/,function(f,c,e,d){b=a(e).get();m(b);if(c)b=k(c).concat(b);if(d)b=b.concat(k(d))});return b?b:k(c)}function k(c){var b=document.createElement("div");b.innerHTML=c;return a.makeArray(b.childNodes)}function o(b){return new Function("jQuery","$item","var $=jQuery,call,__=[],$data=$item.data;with($data){__.push('"+a.trim(b).replace(/([\\'])/g,"\\$1").replace(/[\r\t\n]/g," ").replace(/\$\{([^\}]*)\}/g,"{{= $1}}").replace(/\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,function(m,l,k,g,b,c,d){var j=a.tmpl.tag[k],i,e,f;if(!j)throw"Unknown template tag: "+k;i=j._default||[];if(c&&!/\w$/.test(b)){b+=c;c=""}if(b){b=h(b);d=d?","+h(d)+")":c?")":"";e=c?b.indexOf(".")>-1?b+h(c):"("+b+").call($item"+d:b;f=c?e:"(typeof("+b+")==='function'?("+b+").call($item):("+b+"))"}else f=e=i.$1||"null";g=h(g);return"');"+j[l?"close":"open"].split("$notnull_1").join(b?"typeof("+b+")!=='undefined' && ("+b+")!=null":"true").split("$1a").join(f).split("$1").join(e).split("$2").join(g||i.$2||"")+"__.push('"})+"');}return __;")}function n(c,b){c._wrap=j(c,true,a.isArray(b)?b:[q.test(b)?b:a(b).html()]).join("")}function h(a){return a?a.replace(/\\'/g,"'").replace(/\\\\/g,"\\"):null}function s(b){var a=document.createElement("div");a.appendChild(b.cloneNode(true));return a.innerHTML}function m(o){var n="_"+c,k,j,l={},e,p,h;for(e=0,p=o.length;e<p;e++){if((k=o[e]).nodeType!==1)continue;j=k.getElementsByTagName("*");for(h=j.length-1;h>=0;h--)m(j[h]);m(k)}function m(j){var p,h=j,k,e,m;if(m=j.getAttribute(d)){while(h.parentNode&&(h=h.parentNode).nodeType===1&&!(p=h.getAttribute(d)));if(p!==m){h=h.parentNode?h.nodeType===11?0:h.getAttribute(d)||0:0;if(!(e=b[m])){e=f[m];e=g(e,b[h]||f[h]);e.key=++i;b[i]=e}c&&o(m)}j.removeAttribute(d)}else if(c&&(e=a.data(j,"tmplItem"))){o(e.key);b[e.key]=e;h=a.data(j.parentNode,"tmplItem");h=h?h.key:0}if(e){k=e;while(k&&k.key!=h){k.nodes.push(j);k=k.parent}delete e._ctnt;delete e._wrap;a.data(j,"tmplItem",e)}function o(a){a=a+n;e=l[a]=l[a]||g(e,b[e.parent.key+n]||e.parent)}}}function u(a,d,c,b){if(!a)return l.pop();l.push({_:a,tmpl:d,item:this,data:c,options:b})}function w(d,c,b){return a.tmpl(a.template(d),c,b,this)}function x(b,d){var c=b.options||{};c.wrapped=d;return a.tmpl(a.template(b.tmpl),b.data,c,b.item)}function v(d,c){var b=this._wrap;return a.map(a(a.isArray(b)?b.join(""):b).filter(d||"*"),function(a){return c?a.innerText||a.textContent:a.outerHTML||s(a)})}function t(){var b=this.nodes;a.tmpl(null,null,null,this).insertBefore(b[0]);a(b).remove()}})(jQuery);
</script>
<script type="text/javascript">
/*
* jQuery Highlight plugin
*
* Based on highlight v3 by Johann Burkard
* http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html
*
* Copyright (c) 2009 Bartek Szopka
*
* Licensed under MIT license.
*/
jQuery.extend({highlight:function(e,t,n,r){if(e.nodeType===3){var i=e.data.match(t);if(i){var s=document.createElement(n||"span");s.className=r||"highlight";var o=e.splitText(i.index);o.splitText(i[0].length);var u=o.cloneNode(true);s.appendChild(u);o.parentNode.replaceChild(s,o);return 1}}else if(e.nodeType===1&&e.childNodes&&!/(script|style)/i.test(e.tagName)&&!(e.tagName===n.toUpperCase()&&e.className===r)){for(var a=0;a<e.childNodes.length;a++){a+=jQuery.highlight(e.childNodes[a],t,n,r)}}return 0}});jQuery.fn.unhighlight=function(e){var t={className:"highlight",element:"span"};jQuery.extend(t,e);return this.find(t.element+"."+t.className).each(function(){var e=this.parentNode;e.replaceChild(this.firstChild,this);e.normalize()}).end()};jQuery.fn.highlight=function(e,t){var n={className:"highlight",element:"span",caseSensitive:false,wordsOnly:false};jQuery.extend(n,t);if(e.constructor===String){e=[e]}e=jQuery.grep(e,function(e,t){return e!=""});e=jQuery.map(e,function(e,t){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")});if(e.length==0){return this}var r=n.caseSensitive?"":"i";var i="("+e.join("|")+")";if(n.wordsOnly){i="\\b"+i+"\\b"}var s=new RegExp(i,r);return this.each(function(){jQuery.highlight(this,s,n.element,n.className)})}
</script>
<script type="text/javascript">
libdoc = {"all_tags":[],"contains_tags":false,"doc":"<p>JavaFXLibrary is a test library for Robot Framework targeted for UI acceptance testing of JavaFX applications. JavaFXLibrary can be run with both Jython and Python version of Robot Framework and both in Local and Remote mode.\x3c/p>\n<p>In short, this library is a wrapper for <a href=\"https://github.com/TestFX/TestFX\">TestFX\x3c/a>, which is a Java library for testing JavaFX UI applications.\x3c/p>\n<h3 id=\"1. Preparations before running the tests\">1. Preparations before running the tests\x3c/h3>\n<ul>\n<li>JavaFXLibrary needs to be compiled and packaged. <a href=\"https://github.com/eficode/JavaFXLibrary/releases/latest\">Download JAR release\x3c/a> or clone the <a href=\"https://github.com/eficode/JavaFXLibrary.git\">repository\x3c/a> and run <i>mvn package\x3c/i> from the root folder.\x3c/li>\n<li>The tested application and the JavaFXLibrary jars need to be added to CLASSPATH.\x3c/li>\n\x3c/ul>\n<h3 id=\"2. Using the library\">2. Using the library\x3c/h3>\n<p>Once the library jar -file is available, the library can be taken into use in two ways: <b>Local mode\x3c/b> with <i>Jython\x3c/i> and <b>Remote mode\x3c/b> with both <i>Jython\x3c/i> and <i>Python\x3c/i> version of Robot Framework.\x3c/p>\n<h4 id=\"2.1 Usage in local mode(Jython only)\">2.1 Usage in local mode(Jython only)\x3c/h4>\n<p>First, the JavaFXLibrary needs to be taken into use in the settings table.\x3c/p>\n<table border=\"1\">\n<tr>\n<td><b>Settings\x3c/b>\x3c/td>\n<td><b>Value\x3c/b>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Library\x3c/td>\n<td>JavaFXLibrary\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>Experimental headless mode can be activated at the import time by setting first argument to ${True}\x3c/p>\n<table border=\"1\">\n<tr>\n<td><b>Settings\x3c/b>\x3c/td>\n<td><b>Value\x3c/b>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Library\x3c/td>\n<td>JavaFXLibrary\x3c/td>\n<td>${True}\x3c/td>\n\x3c/tr>\n\x3c/table>\n<h4 id=\"2.2 Usage in remote mode(Jython & Python)\">2.2 Usage in remote mode(Jython & Python)\x3c/h4>\n<p>When using the test library in remote mode, the library needs to be started at the remote end first. This can be done as follows:\x3c/p>\n<ul>\n<li><i>java -jar javafxlibrary-<version>.jar\x3c/i>\x3c/li>\n\x3c/ul>\n<p>This will start the remote server listening at default port number 8270.\x3c/p>\n<p>If there is a need to use a different port the library can be started with optional parameter:\x3c/p>\n<ul>\n<li><i>java -jar javafxlibrary-<version>.jar 1234\x3c/i>\x3c/li>\n\x3c/ul>\n<p>This will start the remote server listening on port 1234.\x3c/p>\n<p>JavaFXLibrary can be taken into use as remote library in settings table as follows:\x3c/p>\n<table border=\"1\">\n<tr>\n<td><b>Settings\x3c/b>\x3c/td>\n<td><b>Value\x3c/b>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Library\x3c/td>\n<td>Remote\x3c/td>\n<td><a href=\"http://localhost:8270\">http://localhost:8270\x3c/a>\x3c/td>\n<td>WITH NAME\x3c/td>\n<td>JavaFXLibrary\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>Multiple JavaFXLibraries in remote mode:\x3c/p>\n<table border=\"1\">\n<tr>\n<td><b>Settings\x3c/b>\x3c/td>\n<td><b>Value\x3c/b>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Library\x3c/td>\n<td>Remote\x3c/td>\n<td>ip_address:8270\x3c/td>\n<td>WITH NAME\x3c/td>\n<td>my_application\x3c/td>\n\x3c/tr>\n<tr>\n<td>Library\x3c/td>\n<td>Remote\x3c/td>\n<td>ip_address:8271\x3c/td>\n<td>WITH NAME\x3c/td>\n<td>my_other_application\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>Experimental headless mode can be activated in remote mode at the import time by setting first argument to ${True}\x3c/p>\n<table border=\"1\">\n<tr>\n<td><b>Settings\x3c/b>\x3c/td>\n<td><b>Value\x3c/b>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Library\x3c/td>\n<td>Remote\x3c/td>\n<td><a href=\"http://localhost:8270\">http://localhost:8270\x3c/a>\x3c/td>\n<td>${True}\x3c/td>\n<td>WITH NAME\x3c/td>\n<td>JavaFXLibrary\x3c/td>\n\x3c/tr>\n\x3c/table>\n<h3 id=\"3. Locating JavaFX Nodes\">3. Locating JavaFX Nodes\x3c/h3>\n<h4 id=\"3.1 Locator syntax\">3.1 Locator syntax\x3c/h4>\n<p>JavaFXLibrary uses TestFX lookup queries as the default way of locating JavaFX Nodes in the UI. These queries are very similar to normal CSS-selectors used in JavaFX, but come with some modifications. Note that the '#'-character must be escaped as it begins a comment in Robot Framework.\x3c/p>\n<table border=\"1\">\n<tr>\n<td><b>Example Query\x3c/b>\x3c/td>\n<td><b>Description\x3c/b>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Submit\x3c/td>\n<td><a href=\"https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Labeled.html\">Labeled\x3c/a> nodes like Buttons and Labels can be located with plain text\x3c/td>\n\x3c/tr>\n<tr>\n<td>VBox HBox Button\x3c/td>\n<td><b>Using class names as selectors does not work.\x3c/b> TestFX tries to find a node containing text \"<i>VBox HBox Button\x3c/i>\" instead\x3c/td>\n\x3c/tr>\n<tr>\n<td>.vBox .hBox \\#submitButton\x3c/td>\n<td>Style classes and IDs can be used just like in CSS\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>Smaller applications with a clear, well-defined structure and more or less static content can easily be tested using only the default locator queries. However, as the application grows in size and its UI is starting to have a lot of dynamic content, things tend to become a bit more difficult. To tackle this, JavaFXLibrary offers additional query types for locating objects: <b>id\x3c/b>, <b>css\x3c/b>, <b>class\x3c/b>, <b>text\x3c/b>, <b>xpath\x3c/b> and <b>pseudo\x3c/b>. Query type is defined by using a prefix.\x3c/p>\n<table border=\"1\">\n<tr>\n<td><b>Example Query\x3c/b>\x3c/td>\n<td><b>Description\x3c/b>\x3c/td>\n\x3c/tr>\n<tr>\n<td>id=submitButton\x3c/td>\n<td>Returns a node with id submitButton. Basically same as default query \"<i>\\#submitButton\x3c/i>\".\x3c/td>\n\x3c/tr>\n<tr>\n<td>css=VBox > .customStyle\x3c/td>\n<td>Returns a node matching the CSS selector.\x3c/td>\n\x3c/tr>\n<tr>\n<td>class=javafx.scene.shape.Rectangle\x3c/td>\n<td>Returns a node that is an instance of the given class.\x3c/td>\n\x3c/tr>\n<tr>\n<td>text=\"Submit\"\x3c/td>\n<td>Returns a node with text value <i>Submit\x3c/i>. The value must be inside quotation marks. Works only with Labeled nodes, and is basically the same as the default locator with plain text.\x3c/td>\n\x3c/tr>\n<tr>\n<td>text=\"Text with \\\"quotation\\\" marks\"\x3c/td>\n<td>Text value can contain spaces and quotation marks, but inner quotation marks must be escaped using <i>'\\'\x3c/i> backslash character.\x3c/td>\n\x3c/tr>\n<tr>\n<td>xpath=//Rectangle[@fill=\"0xff1493ff\"]\x3c/td>\n<td>Returns a Rectangle that has fill value <i>0xff1493ff\x3c/i>. See <a href=\"#3.3%20About%20XPath%20queries\" class=\"name\">3.3 About XPath queries\x3c/a> for more details about using xpath queries.\x3c/td>\n\x3c/tr>\n<tr>\n<td>pseudo=hover;focused\x3c/td>\n<td>Returns a node that contains pseudo class states <i>hover\x3c/i> and <i>focused\x3c/i>. See <a href=\"#3.4%20About%20Pseudo%20queries\" class=\"name\">3.4 About Pseudo queries\x3c/a> for more details about using pseudo queries.\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>These queries can be chained to move in application UI tree more precisely. The result of the previous query is used as the root of the next query. Only queries with prefixes can be chained.\x3c/p>\n<table border=\"1\">\n<tr>\n<td><b>Example Query\x3c/b>\x3c/td>\n<td><b>Description\x3c/b>\x3c/td>\n\x3c/tr>\n<tr>\n<td>xpath=/VBox/HBox[4] css=Label\x3c/td>\n<td>Finds 4th HBox child of VBox and returns the Label it contains.\x3c/td>\n\x3c/tr>\n<tr>\n<td>css=VBox HBox xpath=//Rectangle[@width=\"600.0\"]\x3c/td>\n<td>Finds the HBox using CSS query and proceeds to find a Rectangle that is 600px wide and is located in the HBox.\x3c/td>\n\x3c/tr>\n<tr>\n<td>class=com.eficode.WrapperNode css=.styleClass text=\"toggle fullscreen\"\x3c/td>\n<td>Returns a node containing text <i>toggle fullscreen\x3c/i> that has a parent which contains style class <i>styleClass\x3c/i> and has a parent that is an instance of the WrapperNode class.\x3c/td>\n\x3c/tr>\n\x3c/table>\n<h4 id=\"3.2 Using locators as keyword arguments\">3.2 Using locators as keyword arguments\x3c/h4>\n<p>Locators can be given as arguments for every JavaFXLibrary keyword that accepts a node as an argument. This is useful as it helps keeping the test case implementations cleaner and easier to read. However sometimes it is more convenient to have a reference to the node saved in a variable. <a href=\"#Find\" class=\"name\">Find\x3c/a> and <a href=\"#Find%20All\" class=\"name\">Find All\x3c/a> -keywords can be used to get these references.\x3c/p>\n<table border=\"1\">\n<tr>\n<td>\x3c/td>\n<td><b>Keyword\x3c/b>\x3c/td>\n<td><b>Argument\x3c/b>\x3c/td>\n<td><b>Description\x3c/b>\x3c/td>\n\x3c/tr>\n<tr>\n<td>\x3c/td>\n<td>Click On\x3c/td>\n<td>submit\x3c/td>\n<td>Clicks on node containing text <i>submit\x3c/i>\x3c/td>\n\x3c/tr>\n<tr>\n<td>\x3c/td>\n<td>Click On\x3c/td>\n<td>xpath=//Button[@text=\"submit\"]\x3c/td>\n<td>Clicks on button containing text <i>submit\x3c/i>\x3c/td>\n\x3c/tr>\n<tr>\n<td>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${node}\x3c/td>\n<td>Find\x3c/td>\n<td>submit\x3c/td>\n<td>Finds node containing text <i>submit\x3c/i> and returns it\x3c/td>\n\x3c/tr>\n<tr>\n<td>\x3c/td>\n<td>Click On\x3c/td>\n<td>${node}\x3c/td>\n<td>Click on the node that was found earlier\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>If we wanted to click every Button of the application, we could use Find All and call the click on keyword in a for loop:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${buttons}\x3c/td>\n<td>Find All\x3c/td>\n<td>.button\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>:FOR\x3c/td>\n<td>${button}\x3c/td>\n<td>IN\x3c/td>\n<td>@{buttons}\x3c/td>\n\x3c/tr>\n<tr>\n<td>\\\x3c/td>\n<td>Click On\x3c/td>\n<td>${button}\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n\x3c/table>\n<h4 id=\"3.3 About XPath queries\">3.3 About XPath queries\x3c/h4>\n<p>The FXML used in XPath lookups is generated on the fly and might differ from the actual FXML file the application uses. For example a Button that contains a text value is split into a Parent node Button and a child node LabeledText. Numeric values of attributes such as width and height are represented in their actual type format, which is usually double for JavaFX nodes, so e.g. <i>height=\"600\"\x3c/i> becomes <i>height=\"600.0\"\x3c/i>. This is important to note when using attribute values in the XPath query, as <i>Node[@height=\"600\"]\x3c/i> will not be able to find anything.\x3c/p>\n<table border=\"1\">\n<tr>\n<td><b>Original FXML\x3c/b>\x3c/td>\n<td><b>Generated FXML\x3c/b>\x3c/td>\n\x3c/tr>\n<tr>\n<td><Button text=\"Click me\" />\x3c/td>\n<td><Button> <LabeledText text=\"Click me\" ... /> </Button>\x3c/td>\n\x3c/tr>\n<tr>\n<td><Rectangle width=\"150\" height=\"150\" x=\"300\" />\x3c/td>\n<td><Rectangle width=\"150.0\" height=\"150.0\" x=\"300.0\" />\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>Generated FXML usually contains also some values that are not specifically defined in the actual code, but can still be used to differentiate nodes. To see the generated FXML used for the lookup, use <a href=\"#Log%20FXML\" class=\"name\">Log FXML\x3c/a> keyword. If the tested application is large, it might be easier to first get a parent node closer to the actual point of interest and use it as a root for the Log FXML keyword. This way the output will be easier to read and the log.html wont be millions of lines long.\x3c/p>\n<h4 id=\"3.4 About Pseudo queries\">3.4 About Pseudo queries\x3c/h4>\n<p>All lookup queries return the first matching node, unless used with <a href=\"#Find%20All\" class=\"name\">Find All\x3c/a> keyword in which case all of the matches will be returned. Usually this is not a problem, but pseudo classes require a some additional thought and care. For example when the cursor is hovered on top of a JavaFX Button and the lookup is executed with a query <i>pseudo=hover\x3c/i>, the top level parent node of the button is returned instead of it. This happens because every parent of the button also contains the hover pseudo state.\x3c/p>\n<p>To avoid accidentally targeting parents of the expected node it is advisable to use the closest parent possible as a root for the lookup. Root can be given as an argument for both Find keywords, or it can be defined by adding other queries before using pseudo-query. Multiple pseudo-classes can be given in a single query to further narrow the amount of matching nodes by using ';' separator, e.g. <i>pseudo=hover;focused\x3c/i>.\x3c/p>\n<h3 id=\"4. Argument types and return value types\">4. Argument types and return value types\x3c/h3>\n<p>JavaFXLibrary has built in support for <a href=\"https://github.com/ombre42/jrobotremoteserver\">jrobotremoteserver\x3c/a>, which provides a remote server interface for Robot Framework test libraries. This approach, however, has some limitations when it comes to passing different <a href=\"https://github.com/ombre42/jrobotremoteserver/wiki/User-Guide#Return_Types\">return- and parameter types\x3c/a> between Robot Framework and Java libraries. All simple object types like Strings, Integers, Booleans etc.. remain as they are when passing them between Robot Framework and test libraries but in case of more complex ones, argument types are being converted into Strings. For this situation, JavaFXLibrary keeps internal book keeping for mapping complex objects as key:value pairs. This means that when e.g. JavaFX Node object is returned from library to Robot Framework as a return value, this object is mapped into internal book keeping and only the key (String) representation of JavaFX Node is returned. When this same key (String value) is passed back to JavaFXLibrary, it is converted back to actual JavaFX Node. So, even though the return values are Strings, tester is able to use them 'as if' they were actual Nodes and e.g. call object methods available for Nodes.\x3c/p>\n<p>Let's take an example of a table that can contain complex objects, not just simple string values:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${table cells}=\x3c/td>\n<td>Get Table Row Cells\x3c/td>\n<td>\\#table-id\x3c/td>\n<td>2\x3c/td>\n<td># table cell Nodes are stored in map and string representations are returned\x3c/td>\n\x3c/tr>\n<tr>\n<td>Node Should Be Enabled\x3c/td>\n<td>@{table cells}[column 0]\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td># Library takes the string value as an argument and converts it back to Node\x3c/td>\n\x3c/tr>\n<tr>\n<td>Node Should Have Text\x3c/td>\n<td>@{table cells}[column 1]\x3c/td>\n<td>some text\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Click On\x3c/td>\n<td>@{table cells}[column 2]\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td># in case this cell is clickable\x3c/td>\n\x3c/tr>\n<tr>\n<td>${cell buttons}=\x3c/td>\n<td>Find All From Node\x3c/td>\n<td>@{table cells}[column 3]\x3c/td>\n<td>.button\x3c/td>\n<td># Finds all buttons from table cell Node\x3c/td>\n\x3c/tr>\n<tr>\n<td>Click On\x3c/td>\n<td>@{cell buttons}[0]\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>Most of the JavaFXLibrary keywords can use locators directly e.g. <a href=\"#Click%20On\" class=\"name\">Click On\x3c/a> keyword can take just css selector as an argument, but in some cases it can be convenient to be able to pass in a 'Node' as an argument, especially when dealing with complex data structures.\x3c/p>\n<h3 id=\"5. Used ENUMs\">5. Used ENUMs\x3c/h3>\n<table border=\"1\">\n<tr>\n<td><a href=\"https://github.com/TestFX/TestFX/blob/master/subprojects/testfx-core/src/main/java/org/testfx/robot/Motion.java\">Motion\x3c/a>\x3c/td>\n<td>DEFAULT, DIRECT, HORIZONTAL_FIRST, VERTICAL_FIRST\x3c/td>\n\x3c/tr>\n<tr>\n<td><a href=\"https://docs.oracle.com/javafx/2/api/javafx/scene/input/MouseButton.html\">MouseButton\x3c/a>\x3c/td>\n<td>MIDDLE, NONE, PRIMARY, SECONDARY\x3c/td>\n\x3c/tr>\n<tr>\n<td><a href=\"https://docs.oracle.com/javafx/2/api/javafx/scene/input/KeyCode.html\">KeyCode\x3c/a>\x3c/td>\n<td>Check the link 'KeyCode' on the left\x3c/td>\n\x3c/tr>\n<tr>\n<td><a href=\"https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html\">TimeUnit\x3c/a>\x3c/td>\n<td>DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, SECONDS\x3c/td>\n\x3c/tr>\n<tr>\n<td><a href=\"https://docs.oracle.com/javafx/2/api/javafx/geometry/VerticalDirection.html\">VerticalDirection\x3c/a>\x3c/td>\n<td>UP, DOWN\x3c/td>\n\x3c/tr>\n<tr>\n<td><a href=\"https://docs.oracle.com/javafx/2/api/javafx/geometry/HorizontalDirection.html\">HorizontalDirection\x3c/a>\x3c/td>\n<td>LEFT, RIGHT\x3c/td>\n\x3c/tr>\n<tr>\n<td><a href=\"https://docs.oracle.com/javafx/2/api/javafx/geometry/Pos.html\">Pos\x3c/a>\x3c/td>\n<td>BASELINE_CENTER, BASELINE_LEFT, BASELINE_RIGHT, BOTTOM_CENTER, BOTTOM_LEFT, BOTTOM_RIGHT, CENTER, CENTER_LEFT, CENTER_RIGHT, TOP_CENTER, TOP_LEFT, TOP_RIGHT\x3c/td>\n\x3c/tr>\n\x3c/table>","generated":"2019-11-11 15:34:07","inits":[{"args":["arg1="],"doc":"<p>JavaFXLibrary can be imported with one optional arguments.\x3c/p>\n<ul>\n<li><code>headless\x3c/code>: Determines if tests will be run in headless mode using <a href=\"https://wiki.openjdk.java.net/display/OpenJFX/Monocle\">Monocle\x3c/a>. Default value is <code>false\x3c/code>.\x3c/li>\n\x3c/ul>","matched":true,"name":"Init","shortdoc":"JavaFXLibrary can be imported with one optional arguments.","tags":[]}],"keywords":[{"args":["firstBounds","secondBounds"],"doc":"<p>Checks if given two bounds are equal.\x3c/p>\n<p><code>firstBounds\x3c/code> is an <i>Object:Bounds\x3c/i> that specifies the first comparable Bounds\x3c/p>\n<p><code>secondBounds\x3c/code> is an <i>Object:Bounds\x3c/i> that specifies the second comparable Bounds, see <span class=\"name\">3.2 Using objects\x3c/span>\x3c/p>","matched":true,"name":"Bounds Should Be Equal","shortdoc":"Checks if given two bounds are equal. ","tags":[]},{"args":["stage"],"doc":"<p>Brings the given stage to front\x3c/p>\n<p><code>stage\x3c/code> is an Object:Stage to be set in front of others<span class=\"name\">, see \x3c/span>3.2 Using objects`.\x3c/p>","matched":true,"name":"Bring Stage To Front","shortdoc":"Brings the given stage to front","tags":[]},{"args":["object","method","*arguments="],"doc":"<p>Calls a given method for a given java object.\x3c/p>\n<p><code>object\x3c/code> is a Java object retrieved using JavaFXLibrary keywords, see <span class=\"name\">3.2 Using objects\x3c/span>.\x3c/p>\n<p><code>method\x3c/code> is the name of the method that will be called.\x3c/p>\n<p>Optional <code>arguments\x3c/code> are variable-length arguments that will be provided for the method. If argument type is boolean, byte, char, double, float, int, long or short, it must have \"casting instructions\" in front of it, e.g. <i>\"(boolean)false\"\x3c/i>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${node}=\x3c/td>\n<td>Find\x3c/td>\n<td>\\#node-id\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${max height}=\x3c/td>\n<td>Call Object Method\x3c/td>\n<td>${node}\x3c/td>\n<td>maxHeight\x3c/td>\n<td>(double)10\x3c/td>\n\x3c/tr>\n<tr>\n<td>${node text}=\x3c/td>\n<td>Call Object Method\x3c/td>\n<td>${node}\x3c/td>\n<td>getText\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Call Object Method","shortdoc":"Calls a given method for a given java object.","tags":[]},{"args":["object","method","*arguments="],"doc":"<p>Calls given method in FX Application Thread using Platform.runLater(). See <a href=\"#Call%20Object%20Method\" class=\"name\">Call Object Method\x3c/a> for further documentation.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${node}=\x3c/td>\n<td>Find\x3c/td>\n<td>\\#node-id\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Call Object Method In Fx Application Thread\x3c/td>\n<td>${node}\x3c/td>\n<td>maxHeight\x3c/td>\n<td>(boolean)false\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Call Object Method In Fx Application Thread","shortdoc":"Calls given method in FX Application Thread using Platform.runLater(). See `Call Object Method` for further documentation.","tags":[]},{"args":["locator=target window","logImage=True"],"doc":"<p>Returns a screenshot of the given locator, or if not given from whole active window.\x3c/p>\n<p>Note that active window might only be part of the visible window, it e.g. dialog is active.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Bounds, Node, Point2D, Rectangle, PointQuery, Scene, Window\x3c/i> for identifying the element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p>Argument <code>logImage\x3c/code> is a boolean value that specifies whether a captured image is also printed to test execution log.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${region}=\x3c/td>\n<td>Create Rectangle\x3c/td>\n<td>11\x3c/td>\n<td>22\x3c/td>\n<td>33\x3c/td>\n<td>44\x3c/td>\n\x3c/tr>\n<tr>\n<td>${capture}=\x3c/td>\n<td>Capture Image\x3c/td>\n<td>${region}\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${capture}=\x3c/td>\n<td>Capture Image\x3c/td>\n<td>${node}\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${capture}=\x3c/td>\n<td>Capture Image\x3c/td>\n<td>${window}\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${capture}=\x3c/td>\n<td>Capture Image\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${capture}=\x3c/td>\n<td>Capture Image\x3c/td>\n<td>\\#id\x3c/td>\n<td>logImage=False\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Capture Image","shortdoc":"Returns a screenshot of the given locator, or if not given from whole active window.","tags":[]},{"args":[],"doc":"<p>Returns a screenshot from whole primary screen. Note that this shows also other applications that are open.\x3c/p>","matched":true,"name":"Capture Primary Screen","shortdoc":"Returns a screenshot from whole primary screen. Note that this shows also other applications that are open.","tags":[]},{"args":["locator","logImage=True"],"doc":"<p>Returns a screenshot of the scene conatining given locator.\x3c/p>\n<p><code>locator\x3c/code> is a query locator, see <span class=\"name\">3.1 Using queries\x3c/span>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${capture}=\x3c/td>\n<td>Capture Scene Containing Node\x3c/td>\n<td>${node}\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Capture Scene Containing Node","shortdoc":"Returns a screenshot of the scene conatining given locator.","tags":[]},{"args":[],"doc":"<p>Clears internal book keeping of all java objects.\x3c/p>","matched":true,"name":"Clear Object Map","shortdoc":"Clears internal book keeping of all java objects.","tags":[]},{"args":["locator"],"doc":"<p>Clears the text value of given TextInputControl\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>TextInputControl\x3c/i> object. For identifying the element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Clear Text Input\x3c/td>\n<td>.text-field\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Clear Text Input","shortdoc":"Clears the text value of given TextInputControl","tags":[]},{"args":["locator","motion=DIRECT"],"doc":"<p>Clicks an element specified by given locator.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Bounds, Node, Point2D, PointQuery, Scene, Window\x3c/i> for identifying the element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p><code>motion\x3c/code> defines the path for mouse to move to a target location. Default value is <i>DIRECT\x3c/i>. Especially with submenus, desired motion is usually HORIZONTAL_FIRST.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Click On\x3c/td>\n<td>${node}\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Click On\x3c/td>\n<td>${point}\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Click On\x3c/td>\n<td>\\#node-id\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Click On\x3c/td>\n<td>.css-name\x3c/td>\n<td>Motion=VERTICAL_FIRST\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Click On","shortdoc":"Clicks an element specified by given locator.","tags":[]},{"args":["x","y","motion=DIRECT"],"doc":"<p>Moves mouse directly to the given coordinates and clicks the primary mouse button\x3c/p>\n<p><code>x\x3c/code> and <code>y\x3c/code> defines the coordinates as integer values.\x3c/p>\n<p>Optional argument <code>motion\x3c/code> defines how mouse pointer is moved to target. Defaults to <i>DIRECT\x3c/i>.\x3c/p>","matched":true,"name":"Click On Coordinates","shortdoc":"Moves mouse directly to the given coordinates and clicks the primary mouse button","tags":[]},{"args":["*buttons"],"doc":"<p>Clicks whatever is under the mouse pointer.\x3c/p>\n<p><code>buttons\x3c/code> is a list of mouse buttons to click. See <a href=\"#5.%20Used%20ENUMs\" class=\"name\">5. Used ENUMs\x3c/a> for different mouse buttons available.\x3c/p>","matched":true,"name":"Click On Mouse Button","shortdoc":"Clicks whatever is under the mouse pointer. ","tags":[]},{"args":[],"doc":"<p>Closes the current window, same as ALT + F4 in Windows\x3c/p>","matched":true,"name":"Close Current Window","shortdoc":"Closes the current window, same as ALT + F4 in Windows","tags":[]},{"args":[],"doc":"<p>Closes JavaFX application.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Close JavaFX Application\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Close Javafx Application","shortdoc":"Closes JavaFX application.","tags":[]},{"args":[],"doc":"<p>Closes Wrapped Swing application.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Close Swing Application\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Close Swing Application","shortdoc":"Closes Wrapped Swing application.","tags":[]},{"args":["minX","minY","width","height"],"doc":"<p>Creates a new Bounds object with the given parameters\x3c/p>\n<p><code>minX\x3c/code>, <code>minY\x3c/code>, <code>width\x3c/code>, <code>height\x3c/code> are Double type arguments.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${target bounds}=\x3c/td>\n<td>Create Bounds\x3c/td>\n<td>150\x3c/td>\n<td>150\x3c/td>\n<td>0\x3c/td>\n<td>0\x3c/td>\n\x3c/tr>\n<tr>\n<td>${capture}=\x3c/td>\n<td>Capture Bounds\x3c/td>\n<td>${target bounds}\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>See more at: <a href=\"https://docs.oracle.com/javase/8/javafx/api/javafx/geometry/Bounds.html\">https://docs.oracle.com/javase/8/javafx/api/javafx/geometry/Bounds.html\x3c/a>\x3c/p>","matched":true,"name":"Create Bounds","shortdoc":"Creates a new Bounds object with the given parameters","tags":[]},{"args":["x","y"],"doc":"<p>Creates a new Point2D object with the given parameters\x3c/p>\n<p><code>x\x3c/code> and <code>y\x3c/code> are both Double type arguments.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${point}=\x3c/td>\n<td>Create Point\x3c/td>\n<td>150\x3c/td>\n<td>150\x3c/td>\n\x3c/tr>\n<tr>\n<td>Drop To\x3c/td>\n<td>${point}\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>See more at: <a href=\"https://docs.oracle.com/javase/8/javafx/api/javafx/geometry/Point2D.html\">https://docs.oracle.com/javase/8/javafx/api/javafx/geometry/Point2D.html\x3c/a>\x3c/p>","matched":true,"name":"Create Point","shortdoc":"Creates a new Point2D object with the given parameters","tags":[]},{"args":["minX","minY","width","height"],"doc":"<p>Creates a new Rectangle2D object with the given parameters\x3c/p>\n<p><code>minX\x3c/code>, <code>minY\x3c/code>, <code>width\x3c/code>, <code>height\x3c/code> are Double type arguments.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${rectangle}\x3c/td>\n<td>Create Rectangle\x3c/td>\n<td>${minX}\x3c/td>\n<td>${minY}\x3c/td>\n<td>240\x3c/td>\n<td>240\x3c/td>\n\x3c/tr>\n<tr>\n<td>${image1}\x3c/td>\n<td>Capture Screen Region\x3c/td>\n<td>${rectangle}\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>See more at: <a href=\"https://docs.oracle.com/javase/8/javafx/api/javafx/geometry/Rectangle2D.html\">https://docs.oracle.com/javase/8/javafx/api/javafx/geometry/Rectangle2D.html\x3c/a>\x3c/p>","matched":true,"name":"Create Rectangle","shortdoc":"Creates a new Rectangle2D object with the given parameters","tags":[]},{"args":[],"doc":"<p>Returns the class name of currently active JavaFX Application\x3c/p>","matched":true,"name":"Current Application","shortdoc":"Returns the class name of currently active JavaFX Application","tags":[]},{"args":["locator","motion=DIRECT"],"doc":"<p>Double clicks an element specified by given locator.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Bounds, Node, Point2D, PointQuery, Scene, Window\x3c/i> for identifying the element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p><code>motion\x3c/code> defines the path for mouse to move to a target location. Default value is <i>DIRECT\x3c/i>.\x3c/p>","matched":true,"name":"Double Click On","shortdoc":"Double clicks an element specified by given locator.","tags":[]},{"args":["x","y","motion=DIRECT"],"doc":"<p>Moves mouse directly to the given coordinates and double clicks the primary mouse button\x3c/p>\n<p><code>x\x3c/code> and <code>y\x3c/code> defines the coordinates as integer values.\x3c/p>\n<p>Optional argument <code>motion\x3c/code> defines how mouse pointer is moved to target. Defaults to <i>DIRECT\x3c/i>.\x3c/p>","matched":true,"name":"Double Click On Coordinates","shortdoc":"Moves mouse directly to the given coordinates and double clicks the primary mouse button","tags":[]},{"args":["*buttons"],"doc":"<p>Double clicks whatever is under the mouse pointer.\x3c/p>\n<p><code>buttons\x3c/code> is a list of mouse buttons to click. See <a href=\"#5.%20Used%20ENUMs\" class=\"name\">5. Used ENUMs\x3c/a> for different mouse buttons available.\x3c/p>","matched":true,"name":"Double Click On Mouse Button","shortdoc":"Double clicks whatever is under the mouse pointer. ","tags":[]},{"args":["*buttons"],"doc":"<p>Presses the given mouse button(s) on whatever is under the mouse's current location.\x3c/p>\n<p>Optional parameter <code>buttons\x3c/code> is a list of mouse buttons to be used, defaults to PRIMARY. See <a href=\"#5.%20Used%20ENUMs\" class=\"name\">5. Used ENUMs\x3c/a> for different MouseButtons\x3c/p>","matched":true,"name":"Drag","shortdoc":"Presses the given mouse button(s) on whatever is under the mouse's current location. ","tags":[]},{"args":["locator","button=PRIMARY"],"doc":"<p>Moves mouse on top of the element located using given <i>locator\x3c/i> and presses the given mouse <i>button\x3c/i>.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Bounds, Node, Point2D, PointQuery, Scene, Window\x3c/i> for identifying the element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p>Optional parameter <code>button\x3c/code> is the mouse button to be used, defaults to PRIMARY. See <a href=\"#5.%20Used%20ENUMs\" class=\"name\">5. Used ENUMs\x3c/a> for different MouseButtons\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${node}=\x3c/td>\n<td>Find\x3c/td>\n<td>\\#some-node-id\x3c/td>\n\x3c/tr>\n<tr>\n<td>Drag From\x3c/td>\n<td>${node}\x3c/td>\n<td>SECONDARY\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Drag From","shortdoc":"Moves mouse on top of the element located using given _locator_ and presses the given mouse _button_.","tags":[]},{"args":["x","y","*buttons"],"doc":"<p>Moves the mouse to given coordinates <i>x\x3c/i> and <i>y\x3c/i> and presses the given mouse <i>buttons\x3c/i>\x3c/p>\n<p>Integer argument <code>x\x3c/code> sets the source point for x -coordinate\x3c/p>\n<p>Integer argument <code>y\x3c/code> sets the source point for y -coordinate\x3c/p>\n<p>Optional parameter <code>buttons\x3c/code> is a list of mouse buttons to be used, defaults to PRIMARY. See <a href=\"#5.%20Used%20ENUMs\" class=\"name\">5. Used ENUMs\x3c/a> for different MouseButtons\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${window}=\x3c/td>\n<td>Get Window\x3c/td>\n<td>title=Window Title\x3c/td>\n\x3c/tr>\n<tr>\n<td>Drag From Coordinates\x3c/td>\n<td>${x}\x3c/td>\n<td>${y}\x3c/td>\n\x3c/tr>\n<tr>\n<td>Drop To\x3c/td>\n<td>${window}\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Drag From Coordinates","shortdoc":"Moves the mouse to given coordinates _x_ and _y_ and presses the given mouse _buttons_","tags":[]},{"args":[],"doc":"<p>Releases the mouse at current position.\x3c/p>","matched":true,"name":"Drop","shortdoc":"Releases the mouse at current position.","tags":[]},{"args":["x","y"],"doc":"<p>Moves the mouse horizontally by <i>x\x3c/i> and vertically by <i>y\x3c/i> before releasing the mouse.\x3c/p>\n<p>Integer argument <code>x\x3c/code> is the amount how much to move the mouse horizontally Integer argument <code>y\x3c/code> is the amount how much to move the mouse vertically.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Drag From\x3c/td>\n<td>\\#node-id .css-name\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Drop By\x3c/td>\n<td>-300\x3c/td>\n<td>0\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Drop By","shortdoc":"Moves the mouse horizontally by _x_ and vertically by _y_ before releasing the mouse.","tags":[]},{"args":["locator"],"doc":"<p>Moves mouse on top of the element located using given <i>locator\x3c/i> and and releases the mouse button.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Bounds, Node, Point2D, PointQuery, Scene, Window\x3c/i> for identifying the element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Drop To\x3c/td>\n<td>\\#some-node-id\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Drop To","shortdoc":"Moves mouse on top of the element located using given _locator_ and and releases the mouse button.","tags":[]},{"args":["x","y"],"doc":"<p>Moves the mouse to given coordinates <i>x\x3c/i> and <i>y\x3c/i> and releases mouse buttons\x3c/p>\n<p>Integer argument <code>x\x3c/code> sets the target point for x -coordinate\x3c/p>\n<p>Integer argument <code>y\x3c/code> sets the target point for y -coordinate\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Drag From\x3c/td>\n<td>\\#node-id\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Drop To\x3c/td>\n<td>100\x3c/td>\n<td>100\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Drop To Coordinates","shortdoc":"Moves the mouse to given coordinates _x_ and _y_ and releases mouse buttons","tags":[]},{"args":["amount"],"doc":"<p>Erases the given number of characters from the active element.\x3c/p>\n<p><code>amount\x3c/code> is the number of characters to erase\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Erase Text\x3c/td>\n<td>5\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Erase Text","shortdoc":"Erases the given number of characters from the active element.","tags":[]},{"args":["query","failIfNotFound=False","root="],"doc":"<p>Returns the <b>first\x3c/b> node matching the query.\x3c/p>\n<p><code>query\x3c/code> is a query locator, see <a href=\"#3.%20Locating%20JavaFX%20Nodes\" class=\"name\">3. Locating JavaFX Nodes\x3c/a>.\x3c/p>\n<p><code>failIfNotFound\x3c/code> specifies if keyword should fail if nothing is found. By default it's false and keyword returns null in case lookup returns nothing.\x3c/p>\n<p><code>root\x3c/code> is an optional argument pointing to the element which is used as the origin of the lookup. If root is defined only its children can be found. By default nodes are being looked from everywhere.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${my node}=\x3c/td>\n<td>Find\x3c/td>\n<td>some text\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td># finds node containing text <i>some text\x3c/i>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${my node}=\x3c/td>\n<td>Find\x3c/td>\n<td>.css\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td># finds node with matching style class\x3c/td>\n\x3c/tr>\n<tr>\n<td>${my node}=\x3c/td>\n<td>Find\x3c/td>\n<td>\\#id\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td># finds node with matching <i>id\x3c/i>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${my node}=\x3c/td>\n<td>Find\x3c/td>\n<td>css=VBox\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td># finds node matching the CSS selector\x3c/td>\n\x3c/tr>\n<tr>\n<td>${my node}=\x3c/td>\n<td>Find\x3c/td>\n<td>id=id\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td># finds node with matching <i>id\x3c/i>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${my node}=\x3c/td>\n<td>Find\x3c/td>\n<td>xpath=//Rectangle\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td># finds node matching the XPath\x3c/td>\n\x3c/tr>\n<tr>\n<td>${my node}=\x3c/td>\n<td>Find\x3c/td>\n<td>class=javafx.scene.shape.Rectangle\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td># finds node that is instance of the class\x3c/td>\n\x3c/tr>\n<tr>\n<td>${my node}=\x3c/td>\n<td>Find\x3c/td>\n<td>pseudo=hover\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td># finds node containing the given pseudo class state\x3c/td>\n\x3c/tr>\n<tr>\n<td>${my node}=\x3c/td>\n<td>Find\x3c/td>\n<td>\\#id\x3c/td>\n<td>True\x3c/td>\n<td>\x3c/td>\n<td># this search fails if nothing is found\x3c/td>\n\x3c/tr>\n<tr>\n<td>${my node}=\x3c/td>\n<td>Find\x3c/td>\n<td>css=VBox\x3c/td>\n<td>False\x3c/td>\n<td>${root}\x3c/td>\n<td># finds node matching the CSS selector from the children of given root\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>Or chaining multiple queries together:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${my node}=\x3c/td>\n<td>Find\x3c/td>\n<td>css=VBox HBox xpath=//Rectangle[@width=\"600.0\"]\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>The example above would first look for a node matching the css selector <i>VBox HBox\x3c/i>, then continue the search using the found HBox as a root node, while looking for a node matching the XPath.\x3c/p>","matched":true,"name":"Find","shortdoc":"Returns the *first* node matching the query. ","tags":[]},{"args":["query","failIfNotFound=False","root="],"doc":"<p>Returns <b>all\x3c/b> nodes matching the query.\x3c/p>\n<p><code>query\x3c/code> is a query locator, see <span class=\"name\">3.1 Using queries\x3c/span>.\x3c/p>\n<p><code>failIfNotFound\x3c/code> specifies if keyword should fail if nothing is found. By default it's false and keyword returns null in case lookup returns nothing.\x3c/p>\n<p><code>root\x3c/code> is an optional argument pointing to the element which is used as the origin of the lookup. If root is defined only its children can be found. By default nodes are being looked from everywhere.\x3c/p>\n<p>See keyword <a href=\"#Find\" class=\"name\">Find\x3c/a> for further examples of query usage.\x3c/p>","matched":true,"name":"Find All","shortdoc":"Returns *all* nodes matching the query. ","tags":[]},{"args":["node","query","failIfNotFound=False"],"doc":"<p><b>DEPRECATED!!\x3c/b> Use keyword <a href=\"#Find%20All\" class=\"name\">Find All\x3c/a> instead.\x3c/p>\n<p>Returns <b>all\x3c/b> descendant nodes of given node matching the query.\x3c/p>\n<p><code>node\x3c/code> is the starting point Object:Node from where to start looking, see <span class=\"name\">3.2 Using objects\x3c/span>.\x3c/p>\n<p><code>query\x3c/code> is a query locator, see <span class=\"name\">3.1 Using queries\x3c/span>.\x3c/p>\n<p><code>failIfNotFound\x3c/code> specifies if keyword should fail if nothing is found. By default it's false and keyword returns null in case lookup returns nothing.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${my nodes}=\x3c/td>\n<td>Find All From Node\x3c/td>\n<td>${some node}\x3c/td>\n<td>.css\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>See keyword <a href=\"#Find\" class=\"name\">Find\x3c/a> for further examples of query usage.\x3c/p>","matched":true,"name":"Find All From Node","shortdoc":"*DEPRECATED!!* Use keyword `Find All` instead.","tags":[]},{"args":["query","pseudo","failIfNotFound="],"doc":"<p><b>DEPRECATED!!\x3c/b> Use keyword <a href=\"#Find%20All\" class=\"name\">Find All\x3c/a> instead.\x3c/p>\n<p>Returns <b>all\x3c/b> nodes matching query AND given pseudo-class state. <code>query\x3c/code> is a query locator, see <span class=\"name\">3.1 Using queries\x3c/span>.\x3c/p>\n<p><code>pseudo\x3c/code> is a String value specifying pseudo class value.\x3c/p>\n<p><code>failIfNotFound\x3c/code> specifies if keyword should fail if nothing is found. By default it's false and keyword returns null in case lookup returns nothing.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${my node}=\x3c/td>\n<td>Find All With Pseudo Class\x3c/td>\n<td>.check-box-tree-cell .check-box\x3c/td>\n<td>selected\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Find All With Pseudo Class","shortdoc":"*DEPRECATED!!* Use keyword `Find All` instead.","tags":[]},{"args":["query"],"doc":"<p><b>DEPRECATED!!\x3c/b> Use keyword <a href=\"#Find\" class=\"name\">Find\x3c/a> instead.\x3c/p>\n<p>Returns the <b>first\x3c/b> node matching the query.\x3c/p>\n<p><code>query\x3c/code> is the Class name String to use in lookup.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${my node}=\x3c/td>\n<td>Find\x3c/td>\n<td>javafx.scene.control.Button\x3c/td>\n<td># button class\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Find Class","shortdoc":"*DEPRECATED!!* Use keyword `Find` instead.","tags":[]},{"args":["node","query","failIfNotFound="],"doc":"<p><b>DEPRECATED!!\x3c/b> Use keyword <a href=\"#Find\" class=\"name\">Find\x3c/a> instead.\x3c/p>\n<p>Returns the <b>first\x3c/b> descendant node of given node matching the query.\x3c/p>\n<p><code>node\x3c/code> is the starting point Object:Node from where to start looking, see <span class=\"name\">3.2 Using objects\x3c/span>.\x3c/p>\n<p><code>query\x3c/code> is a query locator, see <span class=\"name\">3.1 Using queries\x3c/span>.\x3c/p>\n<p><code>failIfNotFound\x3c/code> specifies if keyword should fail if nothing is found. By default it's false and keyword returns null in case lookup returns nothing.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${my node}=\x3c/td>\n<td>Find From Node\x3c/td>\n<td>${some node}\x3c/td>\n<td>.css\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>See keyword <a href=\"#Find\" class=\"name\">Find\x3c/a> for further examples of query usage.\x3c/p>","matched":true,"name":"Find From Node","shortdoc":"*DEPRECATED!!* Use keyword `Find` instead.","tags":[]},{"args":["query","failIfNotFound=False"],"doc":"<p><b>DEPRECATED!!\x3c/b> Use keyword <a href=\"#Find\" class=\"name\">Find\x3c/a> instead.\x3c/p>\n<p>finder that mimics <i>xpath\x3c/i> style search.\x3c/p>\n<p><code>query\x3c/code> is a query locator, see <span class=\"name\">3.1 Using queries\x3c/span>.\x3c/p>\n<p><code>failIfNotFound\x3c/code> specifies if keyword should fail if nothing is found. By default it's false and keyword returns null in case lookup returns nothing.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${node}=\x3c/td>\n<td>Find With Path\x3c/td>\n<td>.main-view[0] .split-pane[0] \\#node-id class=GridPane .toggle-button[3] sometext\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Find With Path","shortdoc":"*DEPRECATED!!* Use keyword `Find` instead.","tags":[]},{"args":["locator"],"doc":"<p>Returns a Bounds object for a region located using given locator.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node, Point2D, Scene, or Window\x3c/i> for identifying the region, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${bounds}=\x3c/td>\n<td>Get Bounds\x3c/td>\n<td>${node}\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${target}=\x3c/td>\n<td>Create Bounds\x3c/td>\n<td>150\x3c/td>\n<td>150\x3c/td>\n<td>200\x3c/td>\n<td>200\x3c/td>\n\x3c/tr>\n<tr>\n<td>Should Be Equal\x3c/td>\n<td>${bounds}\x3c/td>\n<td>${target}\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Get Bounds","shortdoc":"Returns a Bounds object for a region located using given locator. ","tags":[]},{"args":["locator"],"doc":"<p>Returns the 'Selected' value(true/false) for given checkbox.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the CheckBox element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Get Check Box Selection","shortdoc":"Returns the 'Selected' value(true/false) for given checkbox. ","tags":[]},{"args":["locator="],"doc":"<p>Returns context menu items as a dictionary containing menu name:node pairs.\x3c/p>\n<p>Optional parameter <code>locator\x3c/code> is an <i>Object:Window\x3c/i> for specifying which contextMenu(window) items should be collected. Default value is the last window returned by <span class=\"name\">Get Target Windows\x3c/span> -keyword.\x3c/p>\n<p>Examples:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Click On\x3c/td>\n<td>\\#menu-button-id\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${menu items}=\x3c/td>\n<td>Get Context Menu Items\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Dictionary Should Contain Key\x3c/td>\n<td>${menu items}\x3c/td>\n<td>menu item name| Click On\x3c/td>\n<td>&{menu items}[menu item name]\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Get Context Menu Items","shortdoc":"Returns context menu items as a dictionary containing menu name:node pairs. ","tags":[]},{"args":[],"doc":"<p>Returns the library version from POM file\x3c/p>","matched":true,"name":"Get Library Version","shortdoc":"Returns the library version from POM file","tags":[]},{"args":["node","className"],"doc":"<p><b>DEPRECATED!!\x3c/b> Use keyword <a href=\"#Find\" class=\"name\">Find\x3c/a> instead.\x3c/p>\n<p>Returns <b>all\x3c/b> descendant nodes of given node matching the given Java class name.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object\x3c/i> for node whose children will be queried, see <a href=\"#3.2%20Using%20locators%20as%20keyword%20arguments\" class=\"name\">3.2 Using locators as keyword arguments\x3c/a>.\x3c/p>\n<p><code>className\x3c/code> is the Java class name to look for.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${panes}=\x3c/td>\n<td>Get Node Children By Class Name\x3c/td>\n<td>${some node}\x3c/td>\n<td>BorderPane\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>Returns an empty list if none is found.\x3c/p>","matched":true,"name":"Get Node Children By Class Name","shortdoc":"*DEPRECATED!!* Use keyword `Find` instead.","tags":[]},{"args":["locator"],"doc":"<p><b>DEPRECATED!!\x3c/b> Use keyword <a href=\"#Find\" class=\"name\">Find\x3c/a> instead.\x3c/p>\n<p>Returns height value of the node.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object\x3c/i> for a node whose getHeight method will be called, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Get Node Height","shortdoc":"*DEPRECATED!!* Use keyword `Find` instead.","tags":[]},{"args":["node"],"doc":"<p>Returns image name and path of the node.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object\x3c/i> for a node whose getHeight method will be called, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p>Returns full image path by subsequently calling impl_getUrl -method.\x3c/p>\n<p>Note, impl_getUrl -method is deprecated! Support for this method will be removed from Java in the future.\x3c/p>","matched":true,"name":"Get Node Image Url","shortdoc":"Returns image name and path of the node. ","tags":[]},{"args":["node"],"doc":"<p>Returns the parent node of node.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object\x3c/i> for a node whose getParent method will be called, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Get Node Parent","shortdoc":"Returns the parent node of node. ","tags":[]},{"args":["locator"],"doc":"<p>Returns text value of the Node.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object\x3c/i> for a node whose getText method will be called, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Get Node Text","shortdoc":"Returns text value of the Node. ","tags":[]},{"args":["locator"],"doc":"<p><b>DEPRECATED!!\x3c/b> Use keyword <a href=\"#Get%20Scene\" class=\"name\">Get Scene\x3c/a> instead.\x3c/p>\n<p>Returns given locators Scene object.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or a <i>Node\x3c/i>, see <a href=\"#3.2%20Using%20locators%20as%20keyword%20arguments\" class=\"name\">3.2 Using locators as keyword arguments\x3c/a>\x3c/p>","matched":true,"name":"Get Nodes Scene","shortdoc":"*DEPRECATED!!* Use keyword `Get Scene` instead.","tags":[]},{"args":["locator"],"doc":"<p>Returns the class name of a given node.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object\x3c/i> for a node whose getSimpleName method will be called, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Get Object Class Name","shortdoc":"Returns the class name of a given node. ","tags":[]},{"args":["object","fieldName"],"doc":"<p>Returns the value of the given field\x3c/p>\n<p><code>object\x3c/code> is a <i>Object:Node\x3c/i> whose property values are to be checked, see <span class=\"name\">3.2 Using objects\x3c/span>.\x3c/p>\n<p><code>fieldName\x3c/code> is a String specifying which field value should be read\x3c/p>","matched":true,"name":"Get Object Property","shortdoc":"Returns the value of the given field","tags":[]},{"args":[],"doc":"<p>Returns the bounds of primary screen.\x3c/p>","matched":true,"name":"Get Primary Screen Bounds","shortdoc":"Returns the bounds of primary screen.","tags":[]},{"args":["locator"],"doc":"<p>Returns the current value for given ProgressBar element.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the ToggleButton element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Get Progress Bar Value","shortdoc":"Returns the current value for given ProgressBar element. ","tags":[]},{"args":["node"],"doc":"<p>Calls getPseudoClassStates() -method for a given node and returns a list of values returned by the method.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object\x3c/i> for node whose pseudo class states will be queried, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${states}=\x3c/td>\n<td>Get Pseudo Class States\x3c/td>\n<td>${node}\x3c/td>\n\x3c/tr>\n<tr>\n<td>Log List\x3c/td>\n<td>${states}\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Get Pseudo Class States","shortdoc":"Calls getPseudoClassStates() -method for a given node and returns a list of values returned by the method.","tags":[]},{"args":["locator"],"doc":"<p>Returns the root node of given element.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node, Window, Scene\x3c/i> for identifying the element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p>Examples for different kind of locators:\x3c/p>\n<p>Window:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${window}=\x3c/td>\n<td>Get Window\x3c/td>\n<td>title=ClickRobot Test\x3c/td>\n\x3c/tr>\n<tr>\n<td>${node}=\x3c/td>\n<td>Get Root Node Of\x3c/td>\n<td>${window}\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>Scene:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${some scene}=\x3c/td>\n<td>Get Nodes Scene\x3c/td>\n<td>${some node}\x3c/td>\n\x3c/tr>\n<tr>\n<td>${root}\x3c/td>\n<td>Get Root Node Of\x3c/td>\n<td>${some scene}\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>Node:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${some node}=\x3c/td>\n<td>find\x3c/td>\n<td>\\#some-node-id\x3c/td>\n\x3c/tr>\n<tr>\n<td>${root}\x3c/td>\n<td>Get Root Node Of\x3c/td>\n<td>${some node}\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>Query:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${root}\x3c/td>\n<td>Get Root Node Of\x3c/td>\n<td>\\#some-node-id\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Get Root Node Of","shortdoc":"Returns the root node of given element.","tags":[]},{"args":["locator"],"doc":"<p>Returns Scene of the given object.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i>, a <i>Node\x3c/i> or a <i>Window\x3c/i>, see <a href=\"#3.2%20Using%20locators%20as%20keyword%20arguments\" class=\"name\">3.2 Using locators as keyword arguments\x3c/a>\x3c/p>","matched":true,"name":"Get Scene","shortdoc":"Returns Scene of the given object. ","tags":[]},{"args":[],"doc":"<p>Gets the screenshot directory for current application\x3c/p>","matched":true,"name":"Get Screenshot Directory","shortdoc":"Gets the screenshot directory for current application","tags":[]},{"args":["locator"],"doc":"<p>Gets the max value for a given scrollbar.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the ScrollBar element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Get Scroll Bar Max Value","shortdoc":"Gets the max value for a given scrollbar. ","tags":[]},{"args":["locator"],"doc":"<p>Gets the min value for a given scrollbar.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the ScrollBar element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Get Scroll Bar Min Value","shortdoc":"Gets the min value for a given scrollbar. ","tags":[]},{"args":["locator"],"doc":"<p>Gets the current value for a given scrollbar\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the ScrollBar element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Get Scroll Bar Value","shortdoc":"Gets the current value for a given scrollbar ","tags":[]},{"args":["locator"],"doc":"<p>Returns the horizontal value for given ScrollPane element.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the ScrollPane element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Get Scroll Pane Horizontal Value","shortdoc":"Returns the horizontal value for given ScrollPane element. ","tags":[]},{"args":["locator"],"doc":"<p>Returns the vertical value for given ScrollPane element.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the ScrollPane element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Get Scroll Pane Vertical Value","shortdoc":"Returns the vertical value for given ScrollPane element. ","tags":[]},{"args":["locator"],"doc":"<p>Returns the selected date from given datepicker element\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the DatePicker element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${date}=\x3c/td>\n<td>Get Selected Date Picker Date\x3c/td>\n<td>\\#datepicker-id\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Get Selected Date Picker Date","shortdoc":"Returns the selected date from given datepicker element","tags":[]},{"args":["locator"],"doc":"<p>Returns the selected RadioButton Node from the same group as given locator points to.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the RadioButton element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Get Selected Radio Button","shortdoc":"Returns the selected RadioButton Node from the same group as given locator points to.","tags":[]},{"args":["locator"],"doc":"<p>Returns the selected TabPane Tab as a dictionary entry in form of 'name : Node' pair.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the TabPane element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${tab}=\x3c/td>\n<td>Get Tab Pane Selected Tab\x3c/td>\n<td>\\#pane-id\x3c/td>\n\x3c/tr>\n<tr>\n<td>Dictionary Should contain Key\x3c/td>\n<td>${tab}\x3c/td>\n<td>tab name\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Get Selected Tab Pane Tab","shortdoc":"Returns the selected TabPane Tab as a dictionary entry in form of 'name : Node' pair.","tags":[]},{"args":["locator"],"doc":"<p>Returns the current value of given spinner element. <code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the Spinner element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Get Spinner Value","shortdoc":"Returns the current value of given spinner element. ``locator`` is either a _query_ or _Object:Node_ for identifying the Spinner element, see `3. Locating or specifying UI elements`.","tags":[]},{"args":["name"],"doc":"<p>Returns given system property value. <code>name\x3c/code> is the system property name to fetch.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${locale}=\x3c/td>\n<td>Get System Property\x3c/td>\n<td>locale\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Get System Property","shortdoc":"Returns given system property value. ``name`` is the system property name to fetch. ","tags":[]},{"args":["locator"],"doc":"<p>Returns a dictionary containing key:value pairs for each tab name and tab content(Node).\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the TabPane element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${tabs}=\x3c/td>\n<td>Get Tab pane Tabs\x3c/td>\n<td>\\#tab-pane-id\x3c/td>\n\x3c/tr>\n<tr>\n<td>Dictionary Should Contain Key\x3c/td>\n<td>${tabs}\x3c/td>\n<td>tab name\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Get Tab Pane Tabs","shortdoc":"Returns a dictionary containing key:value pairs for each tab name and tab content(Node).","tags":[]},{"args":["table","row","column"],"doc":"<p>Returns the Node of cell in the given table location\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the TableView element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p><code>row\x3c/code> Integer value for the row\x3c/p>\n<p><code>column\x3c/code> Integer value for the column\x3c/p>","matched":true,"name":"Get Table Cell","shortdoc":"Returns the Node of cell in the given table location","tags":[]},{"args":["table","row","column"],"doc":"<p>Returns the value of cell in the given location\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the TableView element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p><code>row\x3c/code> Integer value for the row\x3c/p>\n<p><code>column\x3c/code> Integer value for the column\x3c/p>","matched":true,"name":"Get Table Cell Value","shortdoc":"Returns the value of cell in the given location","tags":[]},{"args":["table","column"],"doc":"<p>Returns a list of <b>visible\x3c/b> cells(Nodes) of the given table column.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the TableView element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p><code>column\x3c/code> Integer value for the column\x3c/p>","matched":true,"name":"Get Table Column Cells","shortdoc":"Returns a list of *visible* cells(Nodes) of the given table column.","tags":[]},{"args":["table"],"doc":"<p>Returns the column count of the given table\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the TableView element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Get Table Column Count","shortdoc":"Returns the column count of the given table","tags":[]},{"args":["table","column"],"doc":"<p>Returns list of values of the given table column.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the TableView element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p><code>column\x3c/code> Integer value for the column\x3c/p>","matched":true,"name":"Get Table Column Values","shortdoc":"Returns list of values of the given table column.","tags":[]},{"args":["table","row"],"doc":"<p>Returns the given table row cells in a dictionary in form of name:node pairs.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the TableView element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p><code>row\x3c/code> Integer value for the column Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${row cells}=\x3c/td>\n<td>Get Table Row Cells\x3c/td>\n<td>\\#table-id\x3c/td>\n<td>${2}\x3c/td>\n\x3c/tr>\n<tr>\n<td>Dictionary Should Contain Key\x3c/td>\n<td>${row cells}\x3c/td>\n<td>column name\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${cell text}=\x3c/td>\n<td>Get Node Text\x3c/td>\n<td>&{row cells}[column name]\x3c/td>\n<td># assuming that cell is a node that has a text value\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Get Table Row Cells","shortdoc":"Returns the given table row cells in a dictionary in form of name:node pairs. ","tags":[]},{"args":["table","row"],"doc":"<p>Returns the given table row cells in a dictionary in form of name:node pairs.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the TableView element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p><code>row\x3c/code> Integer value for the column Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${row cells}=\x3c/td>\n<td>Get Table Row Cells\x3c/td>\n<td>\\#table-id\x3c/td>\n<td>${2}\x3c/td>\n\x3c/tr>\n<tr>\n<td>Dictionary Should Contain Key\x3c/td>\n<td>${row cells}\x3c/td>\n<td>column name\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${cell text}=\x3c/td>\n<td>Get Node Text\x3c/td>\n<td>&{row cells}[column name]\x3c/td>\n<td># assuming that cell is a node that has a text value\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Get Table Row Values","shortdoc":"Returns the given table row cells in a dictionary in form of name:node pairs. ","tags":[]},{"args":[],"doc":"<p>Returns the last stored target window\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${window}=\x3c/td>\n<td>Get Target Window\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Get Target Window","shortdoc":"Returns the last stored target window","tags":[]},{"args":["locator"],"doc":"<p>Returns window object.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node, Scene\x3c/i> for identifying the Window. In addition to normal <i>query\x3c/i>, locator can be a search string for <i>pattern=\x3c/i>, <i>title=\x3c/i> or Integer number. See <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p>Examples for different kind of locators:\x3c/p>\n<p>Pattern (defaults to title):\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${window}=\x3c/td>\n<td>Get Window\x3c/td>\n<td>My window title\x3c/td>\n\x3c/tr>\n<tr>\n<td>${window}=\x3c/td>\n<td>Get Window\x3c/td>\n<td>title=My window title\x3c/td>\n\x3c/tr>\n<tr>\n<td>${window}=\x3c/td>\n<td>Get Window\x3c/td>\n<td>pattern=W[i-w]{5} Title\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>Index:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${window}=\x3c/td>\n<td>Get Window\x3c/td>\n<td>0\x3c/td>\n\x3c/tr>\n<tr>\n<td>${window}=\x3c/td>\n<td>Get Window\x3c/td>\n<td>${2}\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>Node:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${some_node}=\x3c/td>\n<td>Find\x3c/td>\n<td>\\#some_id\x3c/td>\n\x3c/tr>\n<tr>\n<td>${window}=\x3c/td>\n<td>Get Window\x3c/td>\n<td>${some_node}\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>Scene:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${some_scene}=\x3c/td>\n<td>Get Nodes Scene\x3c/td>\n<td>${some_node}\x3c/td>\n\x3c/tr>\n<tr>\n<td>${window}=\x3c/td>\n<td>Get Window\x3c/td>\n<td>${some_scene}\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Get Window","shortdoc":"Returns window object.","tags":[]},{"args":["window"],"doc":"<p>Returns the title of the given window.\x3c/p>\n<p><code>locator\x3c/code> is an <i>Object:Window\x3c/i> whose getTitle method will be called, see <span class=\"name\">3.2 Using objects\x3c/span>. This keyword can be coupled with e.g. <a href=\"#List%20Windows\" class=\"name\">List Windows\x3c/a> -keyword.\x3c/p>","matched":true,"name":"Get Window Title","shortdoc":"Returns the title of the given window. ","tags":[]},{"args":["image1","image2","percentage=100"],"doc":"<p>Fails if images are not similar enough\x3c/p>\n<p><code>image1\x3c/code> is an <i>Object:Image\x3c/i> for the first comparable image.\x3c/p>\n<p><code>image2\x3c/code> is an <i>Object:Image\x3c/i> for the second comparable image.\x3c/p>\n<p><code>percentage\x3c/code> the percentage of pixels that should match, defaults to 100.\x3c/p>\n<p>This keyword can be coupled with e.g. <a href=\"#Capture%20Image\" class=\"name\">Capture Image\x3c/a> -keyword.\x3c/p>","matched":true,"name":"Images Should Match","shortdoc":"Fails if images are not similar enough","tags":[]},{"args":["image1","image2","percentage=100"],"doc":"<p>Fails if images are too similar\x3c/p>\n<p><code>image1\x3c/code> is an <i>Object:Image\x3c/i> for the first comparable image.\x3c/p>\n<p><code>image2\x3c/code> is an <i>Object:Image\x3c/i> for the second comparable image.\x3c/p>\n<p><code>percentage\x3c/code> the percentage of pixels that should not match, defaults to 100.\x3c/p>\n<p>This keyword can be coupled with e.g. <a href=\"#Capture%20Image\" class=\"name\">Capture Image\x3c/a> -keyword.\x3c/p>","matched":true,"name":"Images Should Not Match","shortdoc":"Fails if images are too similar","tags":[]},{"args":["appName","*args"],"doc":"<p>Launches JavaFX application with the given arguments.\x3c/p>\n<p><code>appName\x3c/code> is the name of the application to launch.\x3c/p>\n<p><code>appArgs\x3c/code> is a list of arguments to be passed for the application.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Launch JavaFX Application\x3c/td>\n<td><i>javafxlibrary.testapps.MenuApp\x3c/i>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Launch JavaFX Application\x3c/td>\n<td><i>TestApplication.jar\x3c/i>\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Launch Javafx Application","shortdoc":"Launches JavaFX application with the given arguments.","tags":[]},{"args":["appName","*args"],"doc":"<p>Creates a JavaFX wrapper for the given Swing application and launches it. This allows testing Swing embedded JavaFX components. Custom wrappers can be used with Launch Javafx Application keyword, see <a href=\"https://github.com/eficode/JavaFXLibrary/blob/master/src/main/java/javafxlibrary/testapps/SwingApplicationWrapper.java\">SwingApplicationWrapper.java\x3c/a> for example.\x3c/p>\n<p><code>appName\x3c/code> is the name of the application to launch.\x3c/p>\n<p><code>appArgs\x3c/code> is a list of arguments to be passed for the application.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Launch Swing Application\x3c/td>\n<td>_javafxlibrary.testapps.SwingApplication\x3c/td>\n\x3c/tr>\n<tr>\n<td>Launch Swing Application\x3c/td>\n<td><i>TestApplication.jar\x3c/i>\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Launch Swing Application","shortdoc":"Creates a JavaFX wrapper for the given Swing application and launches it. This allows testing Swing embedded JavaFX components. Custom wrappers can be used with Launch Javafx Application keyword, see [https://github.com/eficode/JavaFXLibrary/blob/master/src/main/java/javafxlibrary/testapps/SwingApplicationWrapper.java|SwingApplicationWrapper.java] for example.","tags":[]},{"args":["appName","*args"],"doc":"<p>Creates a wrapper application the same way as in <a href=\"#Launch%20Swing%20Application\" class=\"name\">Launch Swing Application\x3c/a>, but starts it in a new thread. This is required when main method of the test application is blocked and execution does not return after calling it until the application gets closed. Be sure to set the library timeout with <a href=\"#Set%20Timeout\" class=\"name\">Set Timeout\x3c/a> so that the test application will have enough time to load, as the test execution will continue instantly after calling the main method.\x3c/p>\n<p><code>appName\x3c/code> is the name of the application to launch.\x3c/p>\n<p><code>appArgs\x3c/code> is a list of arguments to be passed for the application.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Launch Swing Application In Separate Thread\x3c/td>\n<td>_javafxlibrary.testapps.SwingApplication\x3c/td>\n\x3c/tr>\n<tr>\n<td>Launch Swing Application In Separate Thread\x3c/td>\n<td><i>TestApplication.jar\x3c/i>\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Launch Swing Application In Separate Thread","shortdoc":"Creates a wrapper application the same way as in `Launch Swing Application`, but starts it in a new thread. This is required when main method of the test application is blocked and execution does not return after calling it until the application gets closed. Be sure to set the library timeout with `Set Timeout` so that the test application will have enough time to load, as the test execution will continue instantly after calling the main method.","tags":[]},{"args":["node"],"doc":"<p>Lists methods available for given node. <code>node\x3c/code> is the Object:Node which methods to list, see <span class=\"name\">3.2 Using objects\x3c/span>.\x3c/p>\n<p>When working with custom components you may use this keyword to discover methods you can call with <span class=\"name\">Call Method\x3c/span> keyword.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>List Component Methods\x3c/td>\n<td>${my node}\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"List Node Methods","shortdoc":"Lists methods available for given node. ``node`` is the Object:Node which methods to list, see `3.2 Using objects`. ","tags":[]},{"args":[],"doc":"<p>Returns a list of windows that are ordered by proximity to the last target window.\x3c/p>","matched":true,"name":"List Target Windows","shortdoc":"Returns a list of windows that are ordered by proximity to the last target window.","tags":[]},{"args":[],"doc":"<p>Returns a list of all available windows currently open.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${windows}=\x3c/td>\n<td>List Windows\x3c/td>\n\x3c/tr>\n<tr>\n<td>Log List\x3c/td>\n<td>${windows}\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"List Windows","shortdoc":"Returns a list of all available windows currently open. ","tags":[]},{"args":["path"],"doc":"<p>Loads an image from the given <i>path\x3c/i> in hard drive\x3c/p>\n<p><code>path\x3c/code> is the source path for image in local hard drive.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${image}=\x3c/td>\n<td>Load Image\x3c/td>\n<td>${path to image}node.png\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Load Image","shortdoc":"Loads an image from the given _path_ in hard drive ","tags":[]},{"args":["url"],"doc":"<p>Loads an image from the given <i>url\x3c/i>\x3c/p>\n<p><code>url\x3c/code> is the url for the source image.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${path}=\x3c/td>\n<td>Set Variable\x3c/td>\n<td><a href=\"http://i.imgur.com\">http://i.imgur.com\x3c/a>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${image}=\x3c/td>\n<td>Load Image From Url\x3c/td>\n<td>${path}/A99VNbK.png\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Load Image From Url","shortdoc":"Loads an image from the given _url_","tags":[]},{"args":[],"doc":"<p>Logs current classpath content\x3c/p>","matched":true,"name":"Log Application Classpath","shortdoc":"Logs current classpath content","tags":[]},{"args":["root="],"doc":"<p>Generates and prints FXML representation of the application starting from a given node.\x3c/p>\n<p>Optional argument <code>root\x3c/code> is the starting point from where to start listing child nodes, see <a href=\"#3.2%20Using%20locators%20as%20keyword%20arguments\" class=\"name\">3.2 Using locators as keyword arguments\x3c/a>. Defaults to root node of current window.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${my node}=\x3c/td>\n<td>Find\x3c/td>\n<td>\\#node-id\x3c/td>\n\x3c/tr>\n<tr>\n<td>Log FXML\x3c/td>\n<td>${my node}\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Log FXML","shortdoc":"Generates and prints FXML representation of the application starting from a given node.","tags":[]},{"args":[],"doc":"<p>Prints all system properties that has been set with <b>Set System Property\x3c/b> -keyword\x3c/p>","matched":true,"name":"Log System Properties","shortdoc":"Prints all system properties that has been set with *Set System Property* -keyword","tags":[]},{"args":["x","y","motion=DIRECT"],"doc":"<p>Moves mouse directly from current location to new location specified by <i>x\x3c/i> and <i>y\x3c/i> offsets\x3c/p>\n<p><code>x\x3c/code> is an integer value for horizontal axis x-offset.\x3c/p>\n<p><code>y\x3c/code> is an integer value for vertical axis y-offset.\x3c/p>\n<p>Optional argument <code>motion\x3c/code> defines the path for mouse to move to given coordinates. Default value is <i>DIRECT\x3c/i>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Move By\x3c/td>\n<td>75\x3c/td>\n<td>75\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Move By","shortdoc":"Moves mouse directly from current location to new location specified by _x_ and _y_ offsets","tags":[]},{"args":["locator","motion=DIRECT"],"doc":"<p>Moves mouse over a node located using given locator.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Bounds, Node, Point2D, PointQuery, Scene, Window\x3c/i> for identifying the element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p><code>motion\x3c/code> defines the path for mouse to move to a target location. Default value is <i>DIRECT\x3c/i>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${x}\x3c/td>\n<td>Evaluate\x3c/td>\n<td>${400} + ${SCENE_MINX}\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${y}\x3c/td>\n<td>Evaluate\x3c/td>\n<td>${150} + ${SCENE_MINY}\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${point}\x3c/td>\n<td>Create Point\x3c/td>\n<td>${x}\x3c/td>\n<td>${y}\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Move To\x3c/td>\n<td>${POINT}\x3c/td>\n<td>VERTICAL_FIRST\x3c/td>\n<td>\x3c/td>\n<td># moves mouse on top of given Point object by moving first vertically and then horizontally\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Move To","shortdoc":"Moves mouse over a node located using given locator.","tags":[]},{"args":["x","y","motion=DIRECT"],"doc":"<p>Moves mouse to given coordinates.\x3c/p>\n<p><code>x\x3c/code> is an integer value for horizontal axis x-coordinate.\x3c/p>\n<p><code>y\x3c/code> is an integer value for vertical axis y-coordinate.\x3c/p>\n<p>Optional argument <code>motion\x3c/code> defines the path for mouse to move to given coordinates. Default value is <i>DIRECT\x3c/i>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${x}\x3c/td>\n<td>Evaluate\x3c/td>\n<td>${SCENE_MINX} + ${200}\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${y}\x3c/td>\n<td>Evaluate\x3c/td>\n<td>${SCENE_MINY} + ${200}\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Move To Coordinates\x3c/td>\n<td>${x}\x3c/td>\n<td>${y}\x3c/td>\n<td>HORIZONTAL_FIRST\x3c/td>\n\x3c/tr>\n<tr>\n<td>Label Text Should Be\x3c/td>\n<td>\\#locationLabel\x3c/td>\n<td>200\x3c/td>\n<td>200\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Move To Coordinates","shortdoc":"Moves mouse to given coordinates.","tags":[]},{"args":["locator"],"doc":"<p>Verifies that node is disabled.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the Node, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Node Should Be Disabled","shortdoc":"Verifies that node is disabled. ","tags":[]},{"args":["locator"],"doc":"<p>Verifies that node is enabled.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the Node, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Node Should Be Enabled","shortdoc":"Verifies that node is enabled. ","tags":[]},{"args":["locator"],"doc":"<p>Verifies that node is focused.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the Node, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Node Should Be Focused","shortdoc":"Verifies that node is focused. ","tags":[]},{"args":["locator"],"doc":"<p>Verifies that node is hoverable with mouse.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the Node, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Node Should Be Hoverable","shortdoc":"Verifies that node is hoverable with mouse. ","tags":[]},{"args":["locator"],"doc":"<p>Verifies that node is invisible.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the Node, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Node Should Be Invisible","shortdoc":"Verifies that node is invisible. ","tags":[]},{"args":["locator"],"doc":"<p>Verifies that node is visible.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the Node, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Node Should Be Visible","shortdoc":"Verifies that node is visible. ","tags":[]},{"args":["locator","text"],"doc":"<p>Verifies that given node has text.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the Node, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p><code>text\x3c/code> is the String to be searched for\x3c/p>","matched":true,"name":"Node Should Have Text","shortdoc":"Verifies that given node has text. ","tags":[]},{"args":["locator"],"doc":"<p>Verifies that node is not focused.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the Node, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Node Should Not Be Focused","shortdoc":"Verifies that node is not focused. ","tags":[]},{"args":["locator","text"],"doc":"<p>Verifies that given node has not text.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the Node, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p><code>text\x3c/code> is the String to be searched for\x3c/p>","matched":true,"name":"Node Should Not Have Text","shortdoc":"Verifies that given node has not text. ","tags":[]},{"args":["locator"],"doc":"<p>Sets the current position pointer to a point located using given locator and returns a PointQuery object for it.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Bounds, Node, Point2D, Scene, Window\x3c/i> for identifying the element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${point query}=\x3c/td>\n<td>Point To\x3c/td>\n<td>${node}\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Move To\x3c/td>\n<td>${point query}\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${point query position}=\x3c/td>\n<td>Call Method\x3c/td>\n<td>${point query}\x3c/td>\n<td>getPosition\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Set Target Position\x3c/td>\n<td>BOTTOM_RIGHT\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>${point query}=\x3c/td>\n<td>Point To\x3c/td>\n<td>${some node}\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Move To\x3c/td>\n<td>${point query}\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n<td># moves to bottom right corner of a node that was stored in PointQuery object.\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Point To","shortdoc":"Sets the current position pointer to a point located using given locator and returns a PointQuery object for it. ","tags":[]},{"args":["x","y"],"doc":"<p>Sets the current position pointer to new location based on x,y coordinates and returns a PointQuery object for it.\x3c/p>\n<p><code>x\x3c/code> and <code>y\x3c/code> defines the Integer values for the x- and y -coordinates.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${point query}=\x3c/td>\n<td>Point To Coordinates\x3c/td>\n<td>100\x3c/td>\n<td>200\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Point To Coordinates","shortdoc":"Sets the current position pointer to new location based on x,y coordinates and returns a PointQuery object for it.","tags":[]},{"args":["locator","offsetX","offsetY"],"doc":"<p>Convenience method: Creates and returns a PointQuery pointing to the target with the given offset values.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Bounds, Node, Point2D, Scene, Window\x3c/i> for identifying the element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p>Parameters <code>offsetX\x3c/code> and <code>offsetY\x3c/code> are Double type values for x- and y-axis offsets.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${point query}=\x3c/td>\n<td>Point To With Offset\x3c/td>\n<td>${some node}\x3c/td>\n<td>10.0\x3c/td>\n<td>-10.0\x3c/td>\n\x3c/tr>\n<tr>\n<td>${point query offset}=\x3c/td>\n<td>Call Method\x3c/td>\n<td>${point query}\x3c/td>\n<td>getOffset\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Point To With Offset","shortdoc":"Convenience method: Creates and returns a PointQuery pointing to the target with the given offset values. ","tags":[]},{"args":["*keys"],"doc":"<p>Presses given keys, until explicitly released via keyword 'Release'. Once pressed,\x3c/p>\n<p><code>keys\x3c/code> is the list of keys to be pressed, see a list of different KeyCodes in <a href=\"#5.%20Used%20ENUMs\" class=\"name\">5. Used ENUMs\x3c/a>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Press\x3c/td>\n<td>CONTROL\x3c/td>\n<td>SHIFT\x3c/td>\n<td>G\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Press","shortdoc":"Presses given keys, until explicitly released via keyword 'Release'. Once pressed, ","tags":[]},{"args":["*buttons"],"doc":"<p>Presses and holds mouse buttons.\x3c/p>\n<p><code>buttons\x3c/code> is a list of mouse buttons to press. Defaults to <i>PRIMARY\x3c/i>, see <a href=\"#5.%20Used%20ENUMs\" class=\"name\">5. Used ENUMs\x3c/a> for different mouse buttons. Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Press Mouse Button\x3c/td>\n<td>PRIMARY\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Press Mouse Button","shortdoc":"Presses and holds mouse buttons.","tags":[]},{"args":["root="],"doc":"<p>Prints all child nodes starting from a given node.\x3c/p>\n<p>Optional argument <code>root\x3c/code> is the starting point from where to start listing child nodes, see <a href=\"#3.2%20Using%20locators%20as%20keyword%20arguments\" class=\"name\">3.2 Using locators as keyword arguments\x3c/a>. Defaults to root node of current window.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${my node}=\x3c/td>\n<td>Find\x3c/td>\n<td>\\#node-id\x3c/td>\n\x3c/tr>\n<tr>\n<td>Print Child Nodes\x3c/td>\n<td>${my node}\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Print Child Nodes","shortdoc":"Prints all child nodes starting from a given node.","tags":[]},{"args":["object"],"doc":"<p>Prints a list of all fields and their values of the given Java object\x3c/p>\n<p><code>object\x3c/code> is a <i>Object:Node\x3c/i> whose property field values will be printed, see <span class=\"name\">3.2 Using objects\x3c/span>.\x3c/p>","matched":true,"name":"Print Object Properties","shortdoc":"Prints a list of all fields and their values of the given Java object","tags":[]},{"args":["*keys"],"doc":"<p>Pushes a given key/key combination.\x3c/p>\n<p><code>keys\x3c/code> is the list of keys to be pushed, see a list of different KeyCodes in <a href=\"#5.%20Used%20ENUMs\" class=\"name\">5. Used ENUMs\x3c/a>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Push\x3c/td>\n<td>CONTROL\x3c/td>\n<td>SHIFT\x3c/td>\n<td>G\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Push","shortdoc":"Pushes a given key/key combination.","tags":[]},{"args":["*keys"],"doc":"<p>Pushes given keys one at a time.\x3c/p>\n<p><code>keys\x3c/code> is the list of keys to be pushed, see a list of different KeyCodes in <a href=\"#5.%20Used%20ENUMs\" class=\"name\">5. Used ENUMs\x3c/a>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Push In Order\x3c/td>\n<td>H\x3c/td>\n<td>e\x3c/td>\n<td>l\x3c/td>\n<td>l\x3c/td>\n<td>o\x3c/td>\n\x3c/tr>\n<tr>\n<td>Push In Order\x3c/td>\n<td>BACK_SPACE\x3c/td>\n<td>LEFT\x3c/td>\n<td>BACK_SPACE\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Push In Order","shortdoc":"Pushes given keys one at a time.","tags":[]},{"args":["times","*keys"],"doc":"<p>Pushes a given key/key combination multiple times.\x3c/p>\n<p><code>times\x3c/code> defines how many times to push <code>keys\x3c/code> is the key combination to push, see a list of different KeyCodes in <a href=\"#5.%20Used%20ENUMs\" class=\"name\">5. Used ENUMs\x3c/a>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Push Many Times\x3c/td>\n<td>2\x3c/td>\n<td>LEFT\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Push Many Times\x3c/td>\n<td>5\x3c/td>\n<td>SHIFT\x3c/td>\n<td>X\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Push Many Times","shortdoc":"Pushes a given key/key combination multiple times.","tags":[]},{"args":["locator"],"doc":"<p>Verifies that RadioButton is selected.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the RadioButton element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Radio Button Should Be Selected","shortdoc":"Verifies that RadioButton is selected. ","tags":[]},{"args":["locator"],"doc":"<p>Verifies that RadioButton is not selected.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the RadioButton element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Radio Button Should Not Be Selected","shortdoc":"Verifies that RadioButton is not selected. ","tags":[]},{"args":["*keys"],"doc":"<p>Releases given keys.\x3c/p>\n<p><code>keys\x3c/code> is the list of keys to be released, see a list of different KeyCodes in <a href=\"#5.%20Used%20ENUMs\" class=\"name\">5. Used ENUMs\x3c/a>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Release\x3c/td>\n<td>CONTROL\x3c/td>\n<td>SHIFT\x3c/td>\n<td>G\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>Note: passing in an empty list will release all pressed keys.\x3c/p>","matched":true,"name":"Release","shortdoc":"Releases given keys. ","tags":[]},{"args":["*buttons"],"doc":"<p>Releases pressed mouse buttons.\x3c/p>\n<p><code>buttons\x3c/code> is a list of mouse buttons to release. Defaults to <i>PRIMARY\x3c/i>, see <a href=\"#5.%20Used%20ENUMs\" class=\"name\">5. Used ENUMs\x3c/a> for different mouse buttons. Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Release Mouse Button\x3c/td>\n<td>SECONDARY\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Release Mouse Button","shortdoc":"Releases pressed mouse buttons.","tags":[]},{"args":["locator","motion=DIRECT"],"doc":"<p>Right clicks an element specified by given locator.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Bounds, Node, Point2D, PointQuery, Scene, Window\x3c/i> for identifying the element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p><code>motion\x3c/code> defines the path for mouse to move to a target location. Default value is <i>DIRECT\x3c/i>. Especially with submenus, desired motion is usually HORIZONTAL_FIRST.\x3c/p>","matched":true,"name":"Right Click On","shortdoc":"Right clicks an element specified by given locator.","tags":[]},{"args":["x","y","motion=DIRECT"],"doc":"<p>Moves mouse directly to the given coordinates and right clicks the primary mouse button\x3c/p>\n<p><code>x\x3c/code> and <code>y\x3c/code> defines the coordinates as integer values.\x3c/p>\n<p>Optional argument <code>motion\x3c/code> defines how mouse pointer is moved to target. Defaults to <i>DIRECT\x3c/i>.\x3c/p>","matched":true,"name":"Right Click On Coordinates","shortdoc":"Moves mouse directly to the given coordinates and right clicks the primary mouse button","tags":[]},{"args":[],"doc":"<p>Clicks right mouse button on whatever is under the mouse pointer\x3c/p>","matched":true,"name":"Right Click On Mouse Button","shortdoc":"Clicks right mouse button on whatever is under the mouse pointer","tags":[]},{"args":["image","path"],"doc":"<p>Saves given image to given location\x3c/p>\n<p><code>image\x3c/code> is the target <i>Object:Image\x3c/i> to be saved <code>path\x3c/code> is the target location where image will be saved\x3c/p>","matched":true,"name":"Save Image As","shortdoc":"Saves given image to given location","tags":[]},{"args":["direction","amount=1"],"doc":"<p>Scrolls horizontally by amount (in terms of ticks of a mouse wheel) in given direction.\x3c/p>\n<p><code>amount\x3c/code> is the number of scroll ticks, defaults to 1.\x3c/p>\n<p><code>direction\x3c/code> specifies whether to scroll RIGHT or LEFT.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Move To\x3c/td>\n<td>${some node}\x3c/td>\n\x3c/tr>\n<tr>\n<td>Scroll Horizontally\x3c/td>\n<td>RIGHT\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Scroll Horizontally","shortdoc":"Scrolls horizontally by amount (in terms of ticks of a mouse wheel) in given direction.","tags":[]},{"args":["direction","amount=1"],"doc":"<p>Scrolls vertically by amount (in terms of ticks of a mouse wheel) in given direction.\x3c/p>\n<p><code>amount\x3c/code> is the number of scroll ticks, defaults to 1.\x3c/p>\n<p><code>direction\x3c/code> specifies whether to scroll UP or DOWN.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Move To\x3c/td>\n<td>${some node}\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Scroll Vertically\x3c/td>\n<td>DOWN\x3c/td>\n<td>25\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Scroll Vertically","shortdoc":"Scrolls vertically by amount (in terms of ticks of a mouse wheel) in given direction.","tags":[]},{"args":[],"doc":"<p>Pushes CTRL/CMD + A key combination to select all.\x3c/p>","matched":true,"name":"Select All","shortdoc":"Pushes CTRL/CMD + A key combination to select all.","tags":[]},{"args":["item"],"doc":"<p>Clicks the given item from menu\x3c/p>\n<p><code>item\x3c/code> is the name for the Context Menu item to be clicked. This keyword clicks the first menu item that matches the given item name. Search of an item is started from the last target window.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Click On\x3c/td>\n<td>\\#menu-button-id\x3c/td>\n\x3c/tr>\n<tr>\n<td>Select Context Menu Item\x3c/td>\n<td>menu item name\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Select Context Menu Item","shortdoc":"Clicks the given item from menu","tags":[]},{"args":["locator","tabName"],"doc":"<p>Selects the given Tab from TabPane<span class=\"name\">`locator\x3c/span><span class=\"name\"> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the TabPane element, see \x3c/span>3. Locating or specifying UI elements`.\x3c/p>\n<p><code>tabName\x3c/code> is the name of the tab to be selected\x3c/p>\n<p>Examples:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Select Tab Pane Tab\x3c/td>\n<td>${Tab Pane}\x3c/td>\n<td>tab name\x3c/td>\n\x3c/tr>\n<tr>\n<td>Select Tab Pane Tab\x3c/td>\n<td>\\#tab-id\x3c/td>\n<td>tab name\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Select Tab Pane Tab","shortdoc":"Selects the given Tab from TabPane``locator`` is either a _query_ or _Object:Node_ for identifying the TabPane element, see `3. Locating or specifying UI elements`. ","tags":[]},{"args":["value"],"doc":"<p>Sets whether to embed log images directly into the log.html file or as a link to a file on local disk.\x3c/p>\n<p>Argument <code>value\x3c/code> is a string. Accepted values are <code>embedded\x3c/code> (initial value) and <code>diskonly\x3c/code>. They can be given in uppercase as well.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Set Image Logging\x3c/td>\n<td>DISKONLY\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Set Image Logging","shortdoc":"Sets whether to embed log images directly into the log.html file or as a link to a file on local disk.","tags":[]},{"args":["value"],"doc":"<p>Enables/Disables clicking outside of visible JavaFX application windows. Safe clicking is on by default, preventing clicks outside of the tested application.\x3c/p>\n<p><code>value\x3c/code> can be any of the following: ON, on, OFF, off.\x3c/p>\n<p>Parameter <i>value\x3c/i> specifies whether safety should be toggled on or off\x3c/p>","matched":true,"name":"Set Safe Clicking","shortdoc":"Enables/Disables clicking outside of visible JavaFX application windows. Safe clicking is on by default, preventing clicks outside of the tested application.","tags":[]},{"args":["directory"],"doc":"<p>Sets the screenshot directory for current application\x3c/p>\n<p><code>directory\x3c/code> is a path to a folder which is to be set as current screenshot directory\x3c/p>","matched":true,"name":"Set Screenshot Directory","shortdoc":"Sets the screenshot directory for current application","tags":[]},{"args":["name","value"],"doc":"<p>Sets system property <code>name\x3c/code> to <code>value\x3c/code>. Equals commmand line usage <span class=\"name\">-Dname=value\x3c/span>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Set System Property\x3c/td>\n<td>locale\x3c/td>\n<td>en_US\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Set System Property","shortdoc":"Sets system property ``name`` to ``value``. Equals commmand line usage `-Dname=value`.","tags":[]},{"args":["pointPosition"],"doc":"<p>Stores the given position as the default offset for all point operations.\x3c/p>\n<p><code>pointPosition\x3c/code> sets the default offset for every use of <a href=\"#Point%20To\" class=\"name\">Point To\x3c/a> -keyword. Defaults to <i>CENTER\x3c/i>, see more at <a href=\"#5.%20Used%20ENUMs\" class=\"name\">5. Used ENUMs\x3c/a> and <i>Pos\x3c/i> enum.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Set Target Position\x3c/td>\n<td>TOP_LEFT\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Set Target Position","shortdoc":"Stores the given position as the default offset for all point operations.","tags":[]},{"args":["locator"],"doc":"<p>Sets active target window\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node, Scene\x3c/i> for identifying the Window. In addition to normal <i>query\x3c/i>, locator can be a search string for <i>pattern=\x3c/i>, <i>title=\x3c/i> or Integer number. See <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p>Examples for different kind of locators:\x3c/p>\n<p>pattern (defaults to title):\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Set Target Window\x3c/td>\n<td>My window title\x3c/td>\n\x3c/tr>\n<tr>\n<td>Set Target Window\x3c/td>\n<td>title=My window title\x3c/td>\n\x3c/tr>\n<tr>\n<td>Set Target Window\x3c/td>\n<td>pattern=W[i-w]{5} Title\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>Index:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Set Target Window\x3c/td>\n<td>0\x3c/td>\n\x3c/tr>\n<tr>\n<td>Set Target Window\x3c/td>\n<td>${2}\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>Node:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${some_node}=\x3c/td>\n<td>Find\x3c/td>\n<td>\\#some_id\x3c/td>\n\x3c/tr>\n<tr>\n<td>Set Target Window\x3c/td>\n<td>${some_node}\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n\x3c/table>\n<p>Scene:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>${some_scene}=\x3c/td>\n<td>Get Nodes Scene\x3c/td>\n<td>${some_node}\x3c/td>\n\x3c/tr>\n<tr>\n<td>Set Target Window\x3c/td>\n<td>${some_scene}\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Set Target Window","shortdoc":"Sets active target window","tags":[]},{"args":["timeout"],"doc":"<p>Sets the time waited for nodes to become available. Default value is 5 seconds.<span class=\"name\">`timeout\x3c/span>` is an Integer value for timeout.\x3c/p>","matched":true,"name":"Set Timeout","shortdoc":"Sets the time waited for nodes to become available. Default value is 5 seconds.``timeout`` is an Integer value for timeout.","tags":[]},{"args":["path"],"doc":"<p>Loads given path to classpath.\x3c/p>\n<p><code>path\x3c/code> is the path to add.\x3c/p>\n<p>If directory path has asterisk(*) after directory separator all jar files are added from directory.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Set To Classpath\x3c/td>\n<td>C:${/}users${/}my${/}test${/}folder\x3c/td>\n\x3c/tr>\n<tr>\n<td>Set To Classpath\x3c/td>\n<td>C:${/}users${/}my${/}test${/}folder${/}*\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Set To Classpath","shortdoc":"Loads given path to classpath.","tags":[]},{"args":["milliseconds"],"doc":"<p>Sets the time waited between every character when typing\x3c/p>\n<p><code>milliseconds\x3c/code> is the time waited between each character in milliseconds.\x3c/p>","matched":true,"name":"Set Write Speed","shortdoc":"Sets the time waited between every character when typing","tags":[]},{"args":["switchAmount"],"doc":"<p>Presses ALT/CMD + TAB for the given amount of times.\x3c/p>\n<p><code>switchAmount\x3c/code> is an Integer value and specifies how many switches will be made in total\x3c/p>","matched":true,"name":"Switch Window","shortdoc":"Presses ALT/CMD + TAB for the given amount of times. ","tags":[]},{"args":["locator"],"doc":"<p>Verifies that ToggleButton is selected.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the ToggleButton element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Toggle Button Should Be Selected","shortdoc":"Verifies that ToggleButton is selected. ","tags":[]},{"args":["locator"],"doc":"<p>Verifies that ToggleButton is not selected.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the ToggleButton element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>","matched":true,"name":"Toggle Button Should Not Be Selected","shortdoc":"Verifies that ToggleButton is not selected. ","tags":[]},{"args":["timeout="],"doc":"<p>Waits for current events in Fx Application Thread event queue to finish before continuing.\x3c/p>\n<p><code>timeout\x3c/code> is the maximum time in seconds that the events will be waited for. If the timeout is exceeded the keyword will fail. Default timeout is 5 seconds.\x3c/p>","matched":true,"name":"Wait For Events In Fx Application Thread","shortdoc":"Waits for current events in Fx Application Thread event queue to finish before continuing.","tags":[]},{"args":["locator","timeout=10","timeUnit=SECONDS"],"doc":"<p>Waits until given element can be found.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p><code>timeout\x3c/code> is the maximum waiting time value, defaults to 10\x3c/p>\n<p><code>timeUnit\x3c/code> is the time unit to be used, defaults to SECONDS, see <a href=\"#5.%20Used%20ENUMs\" class=\"name\">5. Used ENUMs\x3c/a> for more options for <i>timeUnit\x3c/i>.\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Wait Until Element Exists\x3c/td>\n<td>\\#some-node-id\x3c/td>\n<td>\x3c/td>\n<td>\x3c/td>\n\x3c/tr>\n<tr>\n<td>Wait Until Element Exists\x3c/td>\n<td>\\#some-node-id\x3c/td>\n<td>200\x3c/td>\n<td>MILLISECONDS\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Wait Until Element Exists","shortdoc":"Waits until given element can be found.","tags":[]},{"args":["locator","timeout=5"],"doc":"<p>Waits until a node located using given locator becomes enabled.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p><code>timeout\x3c/code> is the maximum waiting time in seconds, defaults to 5.\x3c/p>","matched":true,"name":"Wait Until Node Is Enabled","shortdoc":"Waits until a node located using given locator becomes enabled. ","tags":[]},{"args":["locator","timeout=5"],"doc":"<p>Waits until a node located by given locator becomes visible.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p><code>timeout\x3c/code> is the maximum waiting time in seconds, defaults to 5.\x3c/p>","matched":true,"name":"Wait Until Node Is Visible","shortdoc":"Waits until a node located by given locator becomes visible. ","tags":[]},{"args":["locator","timeout=20"],"doc":"<p>Waits until given ProgressBar is finished or timeout expires.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Node\x3c/i> for identifying the ToggleButton element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p><code>timeout\x3c/code> is an integer value for timeout in seconds, defaults to 20 seconds.\x3c/p>","matched":true,"name":"Wait Until Progress Bar Is Finished","shortdoc":"Waits until given ProgressBar is finished or timeout expires. ","tags":[]},{"args":["window"],"doc":"<p>Verifies that given window is focused.\x3c/p>\n<p><code>window\x3c/code> is the <i>Object:Window\x3c/i> that specifies which window should be focused, see <span class=\"name\">3.2 Using objects\x3c/span>\x3c/p>","matched":true,"name":"Window Should Be Focused","shortdoc":"Verifies that given window is focused. ","tags":[]},{"args":["window"],"doc":"<p>Verifies that given window is showing.\x3c/p>\n<p><code>window\x3c/code> is the <i>Object:Window\x3c/i> that specifies which window should be showing, see <span class=\"name\">3.2 Using objects\x3c/span>\x3c/p>","matched":true,"name":"Window Should Be Showing","shortdoc":"Verifies that given window is showing. ","tags":[]},{"args":["text"],"doc":"<p>Writes a given text characters one after the other.\x3c/p>\n<p><code>text\x3c/code> is the text characters to write\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Write\x3c/td>\n<td>Robot Framework\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Write","shortdoc":"Writes a given text characters one after the other.","tags":[]},{"args":["text"],"doc":"<p>Writes a given text to system clipboard and pastes the content to active element.\x3c/p>\n<p><code>text\x3c/code> is the text characters to write\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Write Fast\x3c/td>\n<td>Robot Framework\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Write Fast","shortdoc":"Writes a given text to system clipboard and pastes the content to active element.","tags":[]},{"args":["locator","text"],"doc":"<p>Writes a given text characters one after the other to given locator.\x3c/p>\n<p><code>locator\x3c/code> is either a <i>query\x3c/i> or <i>Object:Bounds, Node, Point2D, PointQuery, Scene, Window\x3c/i> for identifying the element, see <span class=\"name\">3. Locating or specifying UI elements\x3c/span>.\x3c/p>\n<p><code>text\x3c/code> is the text characters to write\x3c/p>\n<p>Example:\x3c/p>\n<table border=\"1\">\n<tr>\n<td>Write To\x3c/td>\n<td>.css-name\x3c/td>\n<td>Robot Framework\x3c/td>\n\x3c/tr>\n\x3c/table>","matched":true,"name":"Write To","shortdoc":"Writes a given text characters one after the other to given locator.","tags":[]}],"name":"JavaFXLibrary","named_args":true,"scope":"global","version":"0.5.3"};
</script>
<title></title>
</head>
<body>
<div id="javascript-disabled">
<h1>Opening library documentation failed</h1>
<ul>
<li>Verify that you have <b>JavaScript enabled</b> in your browser.</li>
<li>Make sure you are using a <b>modern enough browser</b>. If using Internet Explorer, version 8 or newer is required.</li>
<li>Check are there messages in your browser's <b>JavaScript error log</b>. Please report the problem if you suspect you have encountered a bug.</li>
</ul>
</div>
<script type="text/javascript">
// Not using jQuery here for speed and to support ancient browsers.
document.getElementById('javascript-disabled').style.display = 'none';
</script>
<script type="text/javascript">
$(document).ready(function() {
parseTemplates();
document.title = libdoc.name;
renderTemplate('base', libdoc, $('body'));
if (libdoc.inits.length) {
renderTemplate('importing', libdoc);
}
renderTemplate('shortcuts', libdoc);
if (libdoc.contains_tags) {
renderTemplate('tags', libdoc);
}
renderTemplate('keywords', libdoc);
renderTemplate('footer', libdoc);
scrollToHash();
$(document).bind('keydown', handleKeydown);
});
function parseTemplates() {
$('script[type="text/x-jquery-tmpl"]').map(function (idx, elem) {
$.template(elem.id, elem.text);
});
}
function renderTemplate(name, arguments, container) {
if (!container) {
container = $('#' + name + '-container');
container.empty();
}
if (!arguments.search) {
arguments.search = false;
}
$.tmpl(name + '-template', arguments).appendTo(container);
}
function handleKeydown(event) {
event = event || window.event;
var keyCode = event.keyCode || event.which;
if (keyCode === 27) // esc
setTimeout(closeSearch, 0);
if (keyCode === 83 && $('#search').is(':hidden')) // s
setTimeout(openSearch, 0);
}
function scrollToHash() {
if (window.location.hash) {
var hash = window.location.hash.substring(1).replace('+', ' ');
window.location.hash = '';
window.location.hash = hash;
}
}
function tagSearch(tag) {
var include = {tags: true, tagsExact: true};
markMatches(tag, include);
highlightMatches(tag, include);
$('#keywords-container').find('.kw-row').addClass('hide-unmatched');
}
function doSearch() {
var string = $('#search-string').val();
var include = getIncludesAndDisableIfOnlyOneLeft();
if (string) {
markMatches(string, include);
highlightMatches(string, include);
setMatchVisibility();
} else {
resetKeywords();
}
}
function getIncludesAndDisableIfOnlyOneLeft() {
var name = $('#include-name');
var args = $('#include-args');
var doc = $('#include-doc');
var tags = $('#include-tags');
var include = {name: name.prop('checked'),
args: args.prop('checked'),
doc: doc.prop('checked'),
tags: !!tags.prop('checked')};
if ((!include.name) && (!include.args) && (!include.doc)) {
tags.prop('disabled', true);
} else if ((!include.name) && (!include.args) && (!include.tags)) {
doc.prop('disabled', true);
} else if ((!include.name) && (!include.doc) && (!include.tags)) {
args.prop('disabled', true);
} else if ((!include.args) && (!include.doc) && (!include.tags)) {
name.prop('disabled', true);
} else {
name.prop('disabled', false);
args.prop('disabled', false);
doc.prop('disabled', false);
tags.prop('disabled', false);
}
return include;
}
function markMatches(pattern, include) {
pattern = util.regexpEscape(pattern);
if (include.tagsExact) {
pattern = '^' + pattern + '$';
}
var regexp = new RegExp(pattern, 'i');
var test = regexp.test.bind(regexp);
var result = {contains_tags: libdoc.contains_tags};
var matchCount = 0;
result.keywords = util.map(libdoc.keywords, function (kw) {
kw = $.extend({}, kw);
kw.matched = (include.name && test(kw.name) ||
include.args && test(kw.args) ||
include.doc && test($(kw.doc).text()) ||
include.tags && util.any(util.map(kw.tags, test)));
if (kw.matched)
matchCount++;
return kw
});
renderTemplate('shortcuts', result);
renderTemplate('keywords', result);
if (libdoc.contains_tags) {
renderTemplate('tags', libdoc);
}
var ending = matchCount != 1 ? 's.' : '.';
$('#match-count').show().text(matchCount + ' matched keyword' + ending);
$('#altogether-count').hide();
if (matchCount == 0)
$('#keywords-container').find('table').empty();
}
function highlightMatches(string, include) {
var shortcuts = $('#shortcuts-container').find('.match');
var keywords = $('#keywords-container').find('.match');
if (include.name) {
shortcuts.highlight(string);
keywords.find('.kw').highlight(string);
}
if (include.args) {
keywords.find('.args').highlight(string);
}
if (include.doc) {
keywords.find('.doc').highlight(string);
}
if (include.tags) {
var matches = keywords.find('.tags').find('a').add(
$('#tags-container').find('a'));
if (include.tagsExact) {
matches = matches.filter(function (index, tag) {
return $(tag).text().toUpperCase() == string.toUpperCase();
});
}
matches.highlight(string);
}
}
function openSearch() {
$('#search').show();
$('#open-search').hide();
$('#search-string').focus().select();
$(document).scrollTop($("#Shortcuts").offset().top);
}
function closeSearch() {
$('#search').hide();
$('#open-search').show();
}
function resetSearch() {
$('#search-string').val('');
$('#include-name').prop('checked', true);
$('#include-args').prop('checked', true);
$('#include-doc').prop('checked', true);
$('#hide-unmatched').prop('checked', false);
resetKeywords();
}
function resetKeywords() {
renderTemplate('shortcuts', libdoc);
renderTemplate('keywords', libdoc);
if (libdoc.contains_tags) {
renderTemplate('tags', libdoc);
}
$('#match-count').hide();
$('#altogether-count').show();
}
function setMatchVisibility() {
var kws = $('#keywords-container').find('.kw-row');
var hide = $('#hide-unmatched').prop('checked');
kws.toggleClass('hide-unmatched', hide);
}
// http://stackoverflow.com/a/18484799
var delay = (function () {
var timer = 0;
return function(callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
};
})();
</script>
<script type="text/x-jquery-tmpl" id="base-template">
<h1>${name}</h1>
<table class="metadata">
{{if version}}<tr><th>Library version:</th><td>${version}</td></tr>{{/if}}
{{if scope}}<tr><th>Library scope:</th><td>${scope}</td></tr>{{/if}}
<tr><th>Named arguments:</th><td>{{if named_args}}supported{{else}}not supported{{/if}}</td></tr>
</table>
<div id="introduction-container">
<h2 id="Introduction">Introduction</h2>
<div class="doc">{{html doc}}</div>
</div>
<div id="importing-container"></div>
<div id="shortcuts-container"></div>
<div id="tags-container"></div>
<div id="keywords-container"></div>
<div id="footer-container"></div>
<form id="search" action="javascript:void(0)">
<fieldset>
<legend id="search-title">Search keywords</legend>
<input type="text" id="search-string" onkeyup="delay(doSearch, 500)">
<fieldset>
<legend>Search from</legend>
<input type="checkbox" id="include-name" onclick="doSearch()" checked>
<label for="include-name">Name</label>
<input type="checkbox" id="include-args" onclick="doSearch()" checked>
<label for="include-args">Arguments</label>
<input type="checkbox" id="include-doc" onclick="doSearch()" checked>
<label for="include-doc">Documentation</label>
{{if libdoc.contains_tags}}
<input type="checkbox" id="include-tags" onclick="doSearch()" checked>
<label for="include-tags">Tags</label>
{{/if}}
</fieldset>
<input type="checkbox" id="hide-unmatched" onclick="setMatchVisibility()" checked>
<label for="hide-unmatched">Hide unmatched keywords</label>
<div id="search-buttons">
<input type="button" value="Reset" onclick="resetSearch()"
title="Reset search">
<input type="button" value="Close" onclick="closeSearch()"
title="Close search (shortcut: <Esc>)">
</div>
</fieldset>
</form>
<div id="open-search" onclick="openSearch()" title="Search keywords (shortcut: s)"></div>
</script>
<script type="text/x-jquery-tmpl" id="importing-template">
<h2 id="Importing">Importing</h2>
<table border="1" class="keywords">
<tr>
<th class="args">Arguments</th>
<th class="doc">Documentation</th>
</tr>
{{each inits}}
<tr class="kw-row">
<td class="args">
{{each args}}
<span>${$value}</span>{{if $index < args.length-1}}, {{/if}}
{{/each}}
</td>
<td class="doc">{{html $value.doc}}</td>
</tr>
{{/each}}
</table>
</script>
<script type="text/x-jquery-tmpl" id="shortcuts-template">
<h2 id="Shortcuts">Shortcuts</h2>
<div class='shortcuts'>
{{each keywords}}
<a href="#${encodeURIComponent($value.name)}"
class="{{if $value.matched === false}}no-{{/if}}match"
title="${$value.shortdoc}">${$value.name}</a>
{{if $index < keywords.length-1}} · {{/if}}
{{/each}}
</div>
</script>
<script type="text/x-jquery-tmpl" id="tags-template">
<h2 id="Tags">Tags</h2>
<div class='shortcuts'>
{{each all_tags}}
<a href="javascript:tagSearch('${$value}')"
title="Show tests with this tag">${$value}</a> ·
{{/each}}
<a href="javascript:resetKeywords()" class="normal-first-letter"
title="Show all tests">[Reset]</a>
</div>
</script>
<script type="text/x-jquery-tmpl" id="keywords-template">
<h2 id="Keywords">Keywords</h2>
<table border="1" class="keywords">
<tr>
<th class="kw">Keyword</th>
<th class="args">Arguments</th>
{{if libdoc.contains_tags}}
<th class="tags">Tags</th>
{{/if}}
<th class="doc">Documentation</th>
</tr>
{{each keywords}}
{{tmpl($value) 'keyword-template'}}
{{/each}}
</table>
</script>
<script type="text/x-jquery-tmpl" id="keyword-template">
<tr class="kw-row {{if matched === false}}no-{{/if}}match">
<td class="kw">
<a name="${name}" href="#${encodeURIComponent(name)}"
title="Link to this keyword">${name}</a>
</td>
<td class="args">
{{each args}}
<span>${$value}</span>{{if $index < args.length-1}}, {{/if}}
{{/each}}
</td>
{{if libdoc.contains_tags}}
<td class="tags">
{{each tags}}
<a href="javascript:tagSearch('${$value}')"
title="Show tests with this tag">${$value}</a>{{if $index < tags.length-1}}, {{/if}}
{{/each}}
</td>
{{/if}}
<td class="doc">{{html doc}}</td>
</tr>
</script>
<script type="text/x-jquery-tmpl" id="footer-template">
<p class="footer">
<span id="altogether-count">Altogether ${keywords.length} keywords.</span>
<span id="match-count"></span>
<br>
Generated by <a href="http://robotframework.org/robotframework/#built-in-tools">Libdoc</a> on ${generated}.
</p>
</script>
</body>
</html>